QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#269099#7765. Xor Mastersongziyan0 216ms114756kbC++143.7kb2023-11-29 12:37:452023-11-29 12:37:46

Judging History

你现在查看的是最新测评结果

  • [2023-11-29 12:37:46]
  • 评测
  • 测评结果:0
  • 用时:216ms
  • 内存:114756kb
  • [2023-11-29 12:37:45]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define gc getchar
// char buf[1<<22],*p1,*p2;
// #define gc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?0:*p1++)
inline int read(){
	int x=0,f=1;char ch=gc();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=gc();}
	while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+ch-48,ch=gc();
	return x*f;
}
#define rd read()
#define pb push_back
#define mk make_pair
#define pii pair<int,int>
#define ull unsigned long long
const int N=5e5+5;
int n,q,a[N],g[N];
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]+5;
		if(l==r){
			tr[x][0]=sum[x]=bas.qrymax(g[l]);
			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)return sum[x];
		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("%lld",&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){
	return c.sum(qr)^c.sum(ql-1);
	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;
}
/*
*/

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

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

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:

3213624242
3444300315
3595246440
696466611
2557661524
3427296220
3956257230
3983053850
1451141561
226361022
2702066020
2822932398
2562975268
531833879
4268628815
2986831416
1237902697
1694198333
1886306139
1897546427
3516354092
2392297460
637771257
3769837667
3438587025
2654123074
1282478190
3021289...

result:

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

Subtask #2:

score: 0
Wrong Answer

Test #5:

score: 0
Wrong Answer
time: 112ms
memory: 114756kb

input:

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

output:

6566004636884684628
7870278618802860141
5433221939737249722
3702123664448626083
1755500958947592899
5961792793954628036
5379047820617060532
80349306065927576
4855717751406776773
3710909784291080050
5899651258155105609
3807863575189428129
5714369802056979004
5646328496025441354
1327882308325148173
47...

result:

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

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Wrong Answer

Test #15:

score: 0
Wrong Answer
time: 216ms
memory: 46236kb

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:

2181163442
3751333615
555294805
3974539418
929837462
4012453553
1584851917
425070733
3441947609
3260317336
3638202479
545749439
2389087638
2690429642
3514609821
3385288634
2495311746
3159540234
3263162831
3658076028
3868571787
44086123
2134275072
1544536157
1136328607
326920643
2409036346
504617706
...

result:

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

Subtask #5:

score: 0
Skipped

Dependency #4:

0%

Subtask #6:

score: 0
Skipped

Dependency #1:

0%

Subtask #7:

score: 0
Skipped

Dependency #1:

0%