QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#472670#6427. Just Another Game of StonesLinxWA 1ms3984kbC++233.6kb2024-07-11 18:09:442024-07-11 18:09:45

Judging History

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

  • [2024-07-11 18:09:45]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:3984kb
  • [2024-07-11 18:09:44]
  • 提交

answer

#include <bits/stdc++.h>
#define log(x) (31^__builtin_clz(x))
using namespace std;
const int maxn=2e5+5;
int n,q,a[maxn],op,l,r,x;
inline int read() {
	int x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return x*f;
}
const int maxm=500+5;
int bel[maxn],st[maxm],ed[maxm];
int Max[maxm];
vector<int>qwq[maxm],Xor[maxm],sum[30][maxm];
int qp[30];
int main() {
	n=read(),q=read();
	for(int i=1;i<=n;++i) a[i]=read();
	qp[0]=1;
	for(int i=1;i<=29;++i) qp[i]=(qp[i-1]<<1);
	int block=sqrt(n);
	for(int i=1;i<=(n-1)/block+1;++i) {
		st[i]=(i-1)*block+1;
		ed[i]=min(i*block,n);
		for(int j=st[i];j<=ed[i];++j) {
			bel[j]=i;
			qwq[i].push_back(a[j]);
			Xor[i].push_back(0);
			for(int k=0;k<=29;++k) sum[k][i].push_back(0);
		}
		sort(qwq[i].begin(),qwq[i].end());
		for(int j=0;j<qwq[i].size();++j) {
			if(j==0) {
				Xor[i][j]=qwq[i][j];
				for(int k=0;k<=29;++k) sum[k][i][j]=((qwq[i][j]&qp[k])!=0);
			}
			else {
				Xor[i][j]=(Xor[i][j-1]^qwq[i][j]);
				for(int k=0;k<=29;++k) sum[k][i][j]=((qwq[i][j]&qp[k])!=0)+sum[k][i][j-1];
			}
		}
	}
	while(q--) {
		op=read(),l=read(),r=read(),x=read();
		if(op==1) {
			int s=bel[l]+1,t=bel[r]-1;
			for(int i=s;i<=t;++i) Max[i]=max(Max[i],x);
			for(int i=st[s-1];i<=ed[s-1];++i) {
				a[i]=max(a[i],Max[s-1]);
				if(l<=i&&i<=r) a[i]=max(a[i],x);
				qwq[s-1][i-st[s-1]]=a[i];
			}
			Max[s-1]=0;
			sort(qwq[s-1].begin(),qwq[s-1].end());
			for(int i=0;i<qwq[s-1].size();++i) {
				if(i==0) {
					Xor[s-1][i]=qwq[s-1][i];
					for(int k=0;k<=29;++k) sum[k][s-1][i]=((qwq[s-1][i]&qp[k])!=0);
				}
				else {
					Xor[s-1][i]=(Xor[s-1][i-1]^qwq[s-1][i]);
					for(int k=0;k<=29;++k) sum[k][s-1][i]=((qwq[s-1][i]&qp[k])!=0)+sum[k][s-1][i-1];
				}
			}
			if(bel[l]!=bel[r]) {
				for(int i=st[t+1];i<=ed[t+1];++i) {
					a[i]=max(a[i],Max[t+1]);
					if(l<=i&&i<=r) a[i]=max(a[i],x);
					qwq[t+1][i-st[t+1]]=a[i];
				}
				Max[t+1]=0;
				sort(qwq[t+1].begin(),qwq[t+1].end());
				for(int i=0;i<qwq[t+1].size();++i) {
					if(i==0) {
						Xor[t+1][i]=qwq[t+1][i];
						for(int k=0;k<=29;++k) sum[k][t+1][i]=((qwq[t+1][i]&qp[k])!=0);
					}
					else {
						Xor[t+1][i]=(Xor[t+1][i-1]^qwq[t+1][i]);
						for(int k=0;k<=29;++k) sum[k][t+1][i]=((qwq[t+1][i]&qp[k])!=0)+sum[k][t+1][i-1];
					}
				}
			}
		}
		else {
			int s=bel[l]+1,t=bel[r]-1;
			int tmp=0;
			for(int i=s;i<=t;++i) {
				int p=upper_bound(qwq[i].begin(),qwq[i].end(),Max[i])-qwq[i].begin();
				int len=qwq[i].size();
				tmp^=(Xor[i][len-1]^Xor[i][p-1]);
				if(p&1) tmp^=Max[i];
			}
			for(int i=l;i<=min(r,ed[s-1]);++i) tmp^=max(a[i],Max[s-1]);
			if(bel[l]!=bel[r]) {
				for(int i=st[t+1];i<=r;++i) tmp^=max(a[i],Max[t+1]);
			}
			tmp^=x;
			if(tmp==0) puts("0");
			else {
				int js=-1;
				while(tmp) js++,tmp>>=1;
				int ans=0;
				for(int i=l;i<=min(r,ed[s-1]);++i) if((max(a[i],Max[s-1])&(1<<js))&&max(a[i],Max[s-1])!=tmp) ans++;
				if(bel[l]!=bel[r]) {
					for(int i=st[t+1];i<=r;++i) if((max(a[i],Max[t+1])&(1<<js))&&max(a[i],Max[t+1])!=tmp) ans++;
				}
				for(int i=s;i<=t;++i) {
					int p=upper_bound(qwq[i].begin(),qwq[i].end(),Max[i])-qwq[i].begin();
					int len=qwq[i].size();
					if((Max[i]&(1<<js))&&Max[i]!=tmp) ans+=p;
					if(Max[i]<tmp) {
						int p1=lower_bound(qwq[i].begin(),qwq[i].end(),tmp)-qwq[i].begin();
						int p2=upper_bound(qwq[i].begin(),qwq[i].end(),tmp)-qwq[i].begin();
						ans-=p2-p1;
					}
					ans+=sum[js][i][len-1]-sum[js][i][p-1];
				}
				if(log(tmp)==log(tmp&x)) ans++;
				printf("%d\n",ans);
			}
		}
	}
	return 0;
}

详细

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3984kb

input:

5 4
1 2 1 4 1
2 1 3 1
1 2 4 3
2 2 4 4
2 1 4 4

output:

2
0
4

result:

wrong answer 1st numbers differ - expected: '1', found: '2'