Codeforces Round #791 (Div. 2)

#include <bits/stdc++.h>

#define x first
#define y second

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int N = 2e5+10;

void solve()
{
    LL n;
    scanf("%lld", &n);

    if(n < 4 || n % 2 == 1)
    {
        printf("-1
");
        return;
    }

    LL res1 = n/6;
    if(n % 6 >= 2) res1 += 1;
    LL res2 = n/4;

    printf("%lld %lld
", res1, res2);

}

int main()
{
    int T;
    scanf("%d", &T);

    while(T -- )
        solve();

    return 0;
}
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int N = 2e5+10;

int n, m;
int a[N];
map<int, int> mp;

int main()
{
    scanf("%d %d", &n, &m);

    LL res = 0;
    for(int i = 1; i <= n; i ++ )
    {
        scanf("%d", &a[i]);
        mp[i] = a[i];
        res += a[i];
    }

    int last = 0;

    while(m -- )
    {
        int T;
        scanf("%d", &T);
        if(T == 1)
        {
            int i, b;
            scanf("%d %d", &i, &b);
            if( mp[i] )
                res -= mp[i];
            else res -= last;
            res += b;
            mp[i] = b;
        }
        else
        {
            int x;
            scanf("%d", &x);
            mp.clear();
            res = (LL)n * x;
            last = x;
        }

        cout << res << endl;

    }

    return 0;
}
#include <bits/stdc++.h>

using namespace std;

typedef pair<int, int> PII;
typedef long long LL;

const int N = 2e5+10;

int n, m;
int xx[N], yy[N];
int trx[N], tr[N];
int dx[N], dy[N];

int lowbit(int x)
{
    return x & -x;
}

void addx(int a, int x)
{
    for(int i = a; i <= n; i += lowbit(i)) trx[i] += x;
}

void addy(int a, int x)
{
    for(int i = a; i <= n; i += lowbit(i)) tr[i] += x;
}

int queryx(int x)
{
    int res = 0;
    for(int i = x; i > 0; i -= lowbit(i)) res += trx[i];
    return res;
}

int queryy(int x)
{
    int res = 0;
    for(int i = x; i > 0; i -= lowbit(i)) res += tr[i];
    return res;
}

int main()
{
    scanf("%d %d", &n, &m);

    while(m -- )
    {
        int T;
        scanf("%d", &T);

        if(T == 1)
        {
            int x, y;
            scanf("%d %d", &x, &y);

            if( !xx[x] ) addx(x, 1);
            xx[x] ++;
            if( !yy[y] ) addy(y, 1);
            yy[y] ++;
        }
        else if(T == 2)
        {
            int x, y;
            scanf("%d %d", &x, &y);
            xx[x] --, yy[y] --;
            if(xx[x] == 0) addx(x, -1);
            if(yy[y] == 0) addy(y, -1);
        }
        else
        {
            int x1, y1, x2, y2;
            scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
            if( (queryx(x2) - queryx(x1-1) == x2 - x1 + 1) || (queryy(y2) - queryy(y1-1) == y2 - y1 + 1) )
                puts("YES");
            else puts("NO");
        }


    }

    return 0;
}
经验分享 程序员 微信小程序 职场和发展