这么难是入能做出来的吗
TLE了求调!!!
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+5;
struct query{
int l,r,id,block;
bool operator<(const query &o) const{
if(block!=o.block){
return block<o.block;
}
return (block & 1)?(r>o.r):(r<o.r);
}
}q[N];
int n,m,bs,a[N],ans[N],cnt[N],ca;
void ad(int x){
if(!cnt[a[x]]){
ca++;
}
cnt[a[x]]++;
}
void rm(int x){
cnt[a[x]]--;
if(!cnt[a[x]]){
ca--;
}
}
int main(){
cin>>n;
bs = max(1, (int)(n / sqrt(m)));
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].id=i;
q[i].block=q[i].l/bs;
}
sort(q+1,q+m+1);
int ll=1,rr=0;
for(int i=1;i<=m;i++){
while(ll>q[i].l){
ad(--ll);
}
while(rr<q[i].r){
ad(++rr);
}
while(ll<q[i].l){
rm(ll++);
}
while(rr>q[i].r){
rm(rr--);
}
ans[q[i].id]=ca;
}
for(int i=1;i<=m;i++){
cout<<ans[i]<<endl;
}
return 0;
}