氧 气 中 毒
查看原帖
氧 气 中 毒
108067
丛雨楼主2021/3/10 21:39

错误代码:

#include<bits/stdc++.h>
using namespace std;
# define ll long long
# define read read1<ll>()
# define Type template<typename T>
Type T read1(){
	T t=0;char k;bool vis=0;
	do (k=getchar())=='-'&&(vis=1);while('0'>k||k>'9');
	while('0'<=k&&k<='9')t=(t<<3)+(t<<1)+(k^'0'),k=getchar();
	return vis?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define M 100000
int s,m,B,w[100005],v[100005];
bool ans[100005];
struct A{
	int c,l,r,id,ty;
	bool operator < (const A &b)const{return l/B==b.l/B?r<b.r:l<b.l;}
}q[100005];
bitset<100005>a,b;
int main(){a=b=0;
//	fre("P3674_1.in");
	s=read,m=read;B=sqrt(s);
	for(int i=1;i<=s;++i)w[i]=read;
	for(int i=1;i<=m;++i)
		q[i].ty=read,q[i].l=read,q[i].r=read,q[i].c=read,q[i].id=i;
	sort(q+1,q+m+1);
	for(int i=1,l=1,r=0;i<=m;++i){
		while(r<q[i].r)if(!v[w[++r]]++)a[w[r]]=1,b[M-w[r]]=1;
		while(l>q[i].l)if(!v[w[--l]]++)a[w[l]]=1,b[M-w[l]]=1;
		while(r>q[i].r)if(!--v[w[r]])a[w[r]]=0,b[M-w[r--]]=0;
		while(l<q[i].l)if(!--v[w[l]])a[w[l]]=0,b[M-w[l++]]=0;
		switch(q[i].ty){
			case 1:ans[q[i].id]=((a<<q[i].c)&a).any();break;
			case 2:ans[q[i].id]=((a<<M-q[i].c)&b).any();break;
			default:
				for(int j=1;j*j<=q[i].c;++j)
					if(v[j]&&!(q[i].c%j)&&v[q[i].c/j]){
						ans[q[i].id]=1;
						break;
					}
		}
	}
	for(int i=1;i<=m;++i)
		puts(ans[i]?"hana":"bi");
	return 0;
}

本地开了O2O2不仅不会爆死循环,还能与答案只有一个不同。但是在Luogu不开O2O2没显示T??

2021/3/10 21:39
加载中...