標籤:memset col int erase fir fas mes ase space
//#include<bits/stdc++.h>#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>#include<map>#include<set>#include<cmath>#include<queue>#include<bitset>#include<utility>#include<functional>#include<iomanip>#include<sstream>#include<ctime>#include<cassert>#define A first#define B second#define mp make_pair#define pb push_back#define pw(x) (1ll << (x))#define sz(x) ((int)(x).size())#define all(x) (x).begin(),(x).end()#define rep(i,l,r) for(int i=(l);i<(r);i++)#define per(i,r,l) for(int i=(r);i>=(l);i--)#define FOR(i,l,r) for(int i=(l);i<=(r);i++)#define eps 1e-9#define PIE acos(-1)#define cl(a,b) memset(a,b,sizeof(a))#define fastio ios::sync_with_stdio(false);cin.tie(0);#define lson l , mid , ls#define rson mid + 1 , r , rs#define ls (rt<<1)#define rs (ls|1)#define INF 0x3f3f3f3f#define lowbit(x) (x&(-x))#define sqr(a) a*a#define ll long long#define vi vector<int>#define pii pair<int, int>#define dd(x) cout << #x << " = " << (x) << ", "#define de(x) cout << #x << " = " << (x) << "\n"#define endl "\n"using namespace std;//**********************************const int maxn=1<<20;int n,m,k;int belong[maxn];ll flag[maxn],ans[maxn],Ans;int a[maxn];int L=1,R=0;//下標從1開始 struct Node{ int l,r,id;}q[maxn];bool cmp(Node a,Node b){ if(belong[a.l]!=belong[b.l])return belong[a.l]<belong[b.l]; return a.r<b.r;}void insert(int x){ Ans+=flag[a[x]^k];//<-----注意順序 flag[a[x]]++; }void erase(int x){ flag[a[x]]--; //<-----注意順序 Ans-=flag[a[x]^k]; }//**********************************//**********************************int main(){ scanf("%d%d%d",&n,&m,&k); int s=sqrt(n); FOR(i,1,n)scanf("%d",&a[i]),a[i]=a[i]^a[i-1],belong[i]=i/s; FOR(i,1,m)scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i; sort(q+1,q+1+m,cmp); flag[0]=1; FOR(i,1,m){ while(L<q[i].l)erase(L++-1); while(L>q[i].l)insert(--L-1); while(R<q[i].r)insert(++R); while(R>q[i].r)erase(R--); ans[q[i].id]=Ans; //erase都是尾碼減 //insert都是首碼加 } FOR(i,1,m)cout<<ans[i]<<endl; return 0;}
莫隊演算法模板