错误代码:
#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;
}
本地开了O2不仅不会爆死循环,还能与答案只有一个不同。但是在Luogu不开O2没显示T??