题目:P1972 [SDOI2009] HH的项链,莫队模版
我不知为什么又wa又tle,明明就是模版。求大佬调试
#include<bits/stdc++.h>
using namespace std;
inline void write(int x){
if(x==0){putchar('0');return;}
int len=0,k1=x,c[10005];
if(k1<0)k1=-k1,putchar('-');
while(k1)c[len++]=k1%10+'0',k1/=10;
while(len--)putchar(c[len]);
}
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
const int N=1e6+10,M=1e6+10;
int n,m;
int block_size,pos[N],v[N];
struct Q
{
int l,r,k;
}question[M];
int ans[M],res=0;
int cnt[N]={0};
void Add(int x){ if( (++cnt[v[x]]) ==1) res++;}
void Sub(int x){ if( (--cnt[v[x]]) ==0) res--;}
int main()
{
freopen("dm.txt","r",stdin);
freopen("sb.txt","w",stdout);
n=read();
block_size=sqrt(n);
for(int i=1;i<=n;i++)
{
v[i]=read();
pos[i]=i/block_size;
}
m=read();
for(int i=1;i<=m;i++)
{
question[i].l=read();question[i].r=read();
question[i].k=i;
}
sort(question+1,question+m+1, [](Q x ,Q y)
{
return pos[x.l]^pos[y.l]?pos[x.l]<pos[y.l]:(pos[x.l]&1?x.r<y.r:x.r>y.r);
//return pos[x.l]==pos[y.l]?x.r<y.r:pos[x.l]<pos[y.l];
});
int l=1,r=0;
for(int i=1;i<=m;i++)
{
while(question[i].l<l) Add(--l);
while(question[i].r>r) Add(++r);
while(question[i].l>l) Sub(l++);
while(question[i].r<r) Sub(r--);
// cout<<question[i].k<<" "<<l<<" "<<r<<endl;
ans[question[i].k]=res;
}
for(int i=1;i<=m;i++)
cout<<ans[question[i].k]<<endl;
return 0;
}