[Template] - Team Mo - Thank you, Sister Qing

#include <bits/stdc++.h>
#define LL long long
using namespace std;

const int N = 1000010;

struct Quary
{
    int l;
    int r;
    int num;
};

int n, m, w;
int block;
int l, r;
int now;
Quary quary[N];
int pos[N];
int ma[N];
LL cnt[N]; ///Number of records
LL ans[N];

bool cmp(Quary a, Quary b)
{
    if(pos[a.l] == pos[b.l]){
        return a.r < b.r;
    }
    else{
        return pos[a.l] < pos[b.l];
    }
}

intmain()
{
    while(scanf("%d%d%d", &n, &m, &w) == 3){
        ma[0] = 0;
        l = 1;
        r = 0;
        now = 0;
        cnt[0] = 1;
        block = sqrt(n);
        for(int i = 1; i <= n; i ++){
            scanf("%d", &ma[i]);
            ma [i] = ma [i] ^ ma [i - 1];
            pos[i] = i / block;
        }
        for(int i = 1; i <= m; i ++){
            scanf("%d%d", &quary[i].l, &quary[i].r);
            quary[i].num = i;
        }
        sort(quary + 1, quary + m + 1, cmp);
        for(int i = 1; i <= m; i ++){
            while(l < quary[i].l){
                del (l - 1);
                l ++;
            }
            while(l > quary[i].l){
                l --;
                add(l - 1);
            }
            while(r < quary[i].r){
                r ++;
                add(r);
            }
            while(r > quary[i].r){
                del(r);
                r --;
            }
            ans[quary[i].num] = now;
        }
        for(int i = 1; i <= m; i ++){
            printf("%lld\n", ans[i]);
        }
    }

    return 0;
}


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325559993&siteId=291194637