QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#281164#7765. Xor Mastersongziyan0 377ms71040kbC++143.5kb2023-12-09 22:34:592023-12-09 22:35:00

Judging History

This is the latest submission verdict.

  • [2023-12-09 22:35:00]
  • Judged
  • Verdict: 0
  • Time: 377ms
  • Memory: 71040kb
  • [2023-12-09 22:34:59]
  • Submitted

answer

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
const int N=5e5+5;
int n,q;
ull a[N],g[N];
ull min(ull x,ull y){return x<y?x:y;}
ull max(ull x,ull y){return x>y?x:y;}
struct basis{
	ull s[70];
	ull insert(ull x){
		for(int i=63;i>=0;i--)if((x>>i)&1){
			if(!s[i]){
				for(int j=i-1;j>=0;j--)
					if((x>>j)&1)x^=s[j];
				s[i]=x;
				for(int j=63;j>i;j--)
					if((s[j]>>i)&1)s[j]^=x;
				return x;
			}
			x^=s[i];
		}
		return 0;
	}
	ull qrymin(ull x){
		for(int i=63;i>=0;i--)x=min(x,x^s[i]);
		return x;
	}
	ull qrymax(ull x){
		for(int i=63;i>=0;i--)x=max(x,x^s[i]);
		return x;
	}
}bas;
struct bit{
	ull a[N];
	void add(int x,ull v){
		for(;x<=n;x+=(x&(-x)))
			a[x]^=v;
	}
	ull sum(int x){
		ull res=0;
		for(;x;x-=(x&(-x)))	
			res^=a[x];
		return res;
	}
	void init(){
		memset(a,0,sizeof(a));
	}
}c;
struct tree{
	#define lc x<<1
	#define rc x<<1|1
	ull tmp[N<<4],*p=tmp;
	ull *tr[N<<2],tag[N<<2];//,sum[N<<2];
	int tot[N<<2],len[N<<2];
	void pushup(int x){
		ull k=0;
		for(int i=0;i<tot[x];i++){
			tr[x][i]=tr[lc][i]^tr[rc][i]^k;
			k=(tr[lc][i]&tr[rc][i])|(tr[lc][i]&k)|(tr[rc][i]&k);
		}
		//sum[x]=sum[lc]+sum[rc];
	}
	void addtag(int x,ull v){
		tag[x]^=v;
		//sum[x]=0;
		ull k=0;
		for(int i=0;i<tot[x];i++){
			ull t=k;
			if((len[x]>>i)&1){
				k=k&(tr[x][i]&v);
				tr[x][i]=tr[x][i]^t^v;
			}else{
				k=k|(tr[x][i]&v);
				tr[x][i]=tr[x][i]^t;
			}
			//sum[x]+=(tr[x][i]<<i);
		}
	}
	void pushdown(int x){
		if(tag[x]){
			addtag(lc,tag[x]);
			addtag(rc,tag[x]);
			tag[x]=0;
		}
	}
	void build(int x,int l,int r){
		tag[x]=0;
		len[x]=r-l+1;
		while((1<<tot[x])<=(r-l+1))++tot[x];
		tr[x]=p;p+=tot[x];
		if(l==r){
			tr[x][0]=/*sum[x]=*/bas.qrymax(g[l]);
			//printf("%llu ",tr[x][0]);
			return;
		}
		int mid=(l+r)>>1;
		build(lc,l,mid);
		build(rc,mid+1,r);
		pushup(x);
	}
	void upd(int x,int l,int r,int ql,int qr,ull v){
		if(!v)return;
		if(ql<=l&&r<=qr)return addtag(x,v);
		pushdown(x);
		int mid=(l+r)>>1;
		if(ql<=mid)upd(lc,l,mid,ql,qr,v);
		if(qr>mid)upd(rc,mid+1,r,ql,qr,v);
		pushup(x);
	}
	ull qry(int x,int l,int r,int ql,int qr){
		if(ql<=l&&r<=qr){
			ull res=0;
			for(int i=0;i<tot[x];i++)
				res+=(tr[x][i]<<i);
			return res;
		}
		pushdown(x);
		int mid=(l+r)>>1;
		ull res=0;
		if(ql<=mid)res+=qry(lc,l,mid,ql,qr);
		if(qr>mid)res+=qry(rc,mid+1,r,ql,qr);
		return res;
	}
	void rbuild(int x,int l,int r){
		tag[x]=0;
		if(l==r){
			tr[x][0]=/*sum[x]=*/bas.qrymax(g[l]);
			return;
		}
		int mid=(l+r)>>1;
		rbuild(lc,l,mid);
		rbuild(rc,mid+1,r);
		pushup(x);
	}
}T;
void init(){
	scanf("%lld%lld",&n,&q);
	for(int i=1;i<=n;i++)
		scanf("%llu",&a[i]);
	for(int i=1;i<=n;i++){
		g[i]=g[i-1]^a[i];
		c.add(i,a[i]);
	}
	T.build(1,1,n);
}
void opt1(int x,ull v){
	a[x]^=v;
	c.add(x,v);
	T.upd(1,1,n,x,n,bas.qrymin(v));
}
void opt2(ull v){
	if(bas.insert(v)){
		c.init();
		for(int i=1;i<=n;i++){
			g[i]=g[i-1]^a[i];
			c.add(i,a[i]);
		}
		T.rbuild(1,1,n);
	}
}
ull opt3(int ql,int qr){
	ull pre=c.sum(ql-1);
	ull v=bas.qrymin(pre);
	T.upd(1,1,n,ql,qr,v);
	ull ans=T.qry(1,1,n,ql,qr);
	T.upd(1,1,n,ql,qr,v);
	return ans;
}
signed main(){
	init();
	while(q--){
		int op,x,l,r;ull v;
		scanf("%lld",&op);
		if(op==1){
			scanf("%lld%llu",&x,&v);
			opt1(x,v);
		}
		if(op==2){
			scanf("%llu",&x);
			opt2(x);
		}
		if(op==3){
			scanf("%lld%lld",&l,&r);
			printf("%llu\n",opt3(l,r));
		}
	}
	return 0;
}
/*
*/

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 0ms
memory: 17108kb

input:

2000 2000
1860495733 462603674 3739839441 759356520 47330263 550811730 2301200895 989240351 2499503801 2624225494 2123076812 1180966826 238739434 488666688 784742950 2583466952 4111371941 2335988605 2583741355 933716686 1644403538 1970423306 304500250 905101643 1814942168 1136358764 88729799 1577263...

output:

976191827631
3867537073687
2104509992109
751540417039
257445000899
2193504150522
658792719098
1298284884437
1077600229340
634380064074
1531018465983
968003981645
3130274729757
806517798360
2448660981548
3189560655140
2846014663480
2133937353619
907078194451
276084772755
2996864003491
1373092952310
1...

result:

wrong answer 1st lines differ - expected: '867006634793', found: '976191827631'

Subtask #2:

score: 0
Wrong Answer

Test #5:

score: 0
Wrong Answer
time: 377ms
memory: 71040kb

input:

500000 100000
12261386944926786495 7846697792998647383 16622924885320463714 170129022271213944 12625257523700625864 7684671687986103560 11532026873918423068 1131776055566669037 8263146651412710501 17872572061246021001 5017109039248728310 11088626167542318645 13810119722795416818 10928315716094262229...

output:

12966267075942980396
7439272392091877222
18243894721124940165
8847281310341967738
16280249377763261225
10113443012826888774
18340989594556073671
16310408883015792979
16585446015367315524
9379735749904252342
17510957337408845651
1448830036520627097
10983209965581500519
3214638554141151401
18215998623...

result:

wrong answer 1st lines differ - expected: '12337138966997790840', found: '12966267075942980396'

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Test #15:

score: 0
Wrong Answer
time: 238ms
memory: 29312kb

input:

100000 100000
860905160 3192911636 290327446 2020707113 959258245 454185039 421895589 1070265496 2218913641 1684685660 1206723673 2606734467 4247254571 3341954386 3805299640 1702270353 2472053741 2816060613 1307901348 2702949728 879391505 884661815 330738731 1575749344 1239158446 2099693858 67466644...

output:

254679179439323
120693012661611
202098814240683
59510732730279
42336703215573
98600462072325
39362822050093
43547771813364
20251926440929
294504007928306
214085043005108
277128936811106
13102126771386
114976643268040
86072446228464
202699323890302
44316201804361
260658707687801
206784437091886
98880...

result:

wrong answer 1st lines differ - expected: '208755389215975', found: '254679179439323'

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%