RT,WA on #5,#8,#9,#10
WA #9:
Wrong Answer On line 20295 column 1, read 6, expected 5.
拍了2000组小数据也没拍出来/kk
// Problem: P5312 [Ynoi2011] 竞赛实验班
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P5312
// Memory Limit: 500 MB
// Time Limit: 1000 ms
#include<bits/stdc++.h>
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define UF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define bit(x,i) (x>>(i)&1)
using namespace std;
typedef long long ll;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char *p1,*p2,buf[1<<21];
int read() {
int s=0,w=0;char ch=getchar();
while(ch<'0'||ch>'9') w|=(ch=='-'),ch=getchar();
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return w?-s:s;
}
const int NT=2e6+5,N=2e5+5;//dong tai kai dian
int xfind,xall;
ll sr,sl;
struct S {
int s[32],len;
S() {memset(s,0,sizeof s);len=0;}
int& operator[](int id) {return s[id];}
void operator+=(S b) {F(i,0,31) s[i]+=b[i];len+=b.len;}
void operator+=(int x) {F(i,0,31) if(bit(x,i)) s[i]++;len++;}
void operator^=(int x) {F(i,0,31) if(bit(x,i)) s[i]=len-s[i];}
ll operator()() const {ll sum=0;F(i,0,31) sum+=(1ll<<i)*s[i];return sum;}
};
struct TRIE {
S sum[NT];
int nxt[NT][2],rt=1,snt=1;
void ins(int x) {
int now=rt;
UF(i,31,0) {
sum[now]+=x;
if(!nxt[now][bit(x,i)]) nxt[now][bit(x,i)]=++snt;
now=nxt[now][bit(x,i)];
} sum[now]+=x;
}
ll q(int k) {
int now=rt,x=0;S res;
UF(i,31,0) {
int l=nxt[now][0],r=nxt[now][1];
if(bit(xfind,i)) swap(l,r);
sum[l].len>=k?now=l,x+=bit(xfind,i)*(1<<i):(k-=sum[l].len,res+=sum[l],now=r,x+=!bit(xfind,i)*(1<<i));
if(!i&&k) {F(j,0,31) if(bit(x,j)) res[j]+=k;res.len+=k;}
}
res^=xall;return res();
}
} t;
struct Q {
S sum[N];
int a[N],n;
int& operator[](int id) {return a[id];}
void ins(int x) {a[++n]=x;sum[n]+=sum[n-1];sum[n]+=x;}
ll q(int k) {S res;res+=sum[k];res^=xall;return res();}
void clr() {n=0;}
} q;
ll sum(int k) {
int tl=t.sum[t.rt].len;
if(k>tl) return t.q(tl)+q.q(k-tl);
else return t.q(k);
}
int main() {
F(i,1,read()) q.ins(read());
F(UVIGJUTDUYFIGTUYFGHOI,1,read()) {
switch(read()) {
case 1:q.ins(read()^xall);break;
case 2:sl=sum(read()-1);sr=sum(read());cout<<sr-sl<<endl;break;
case 3:xall^=read();break;
case 4:F(i,1,q.n) t.ins(q[i]);q.clr();xfind=xall;break;
}
}
return 0;
}