#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1000005;
int n;
int a[N];
int m;
struct box{
int l,r;
int plc;
int ans;
}k[N];
bool cmp(box x,box y){
if(x.l!=y.l){
return x.l<y.l;
}
return x.r<y.r;
}
int b[N];
int cnt;
bool cmp2(box x,box y){
return x.plc<y.plc;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>k[i].l>>k[i].r;
k[i].plc=i;
}
sort(k+1,k+1+m,cmp);
for(int i=k[1].l;i<=k[1].r;i++){
b[a[i]]++;
if(b[a[i]]==1){
cnt++;
}
}
k[1].ans=cnt;
for(int i=2;i<=m;i++){
for(int j=k[i-1].l;j<k[i].l;j++){
b[a[j]]--;
if(b[a[j]]==0){
cnt--;
}
}
if(k[i].r>=k[i-1].r){
for(int j=k[i-1].r+1;j<=k[i].r;j++){
b[a[j]]++;
if(b[a[j]]==1){
cnt++;
}
}
}
else{
for(int j=k[i].r;j>k[i-1].r;j--){
b[a[j]]--;
if(b[a[j]]==0){
cnt--;
}
}
}
k[i].ans=cnt;
}
sort(k+1,k+1+m,cmp2);
for(int i=1;i<=m;i++){
cout<<k[i].ans<<endl;
}
return 0;
}
/*
*/
抱歉我用树状数组
我用的也是树状数组
我用的莫队
莫队不行吗?QWQ
当然可以
我用的莫队但是跟你的差别也比较大
是我的写法有问题么QWQ
还是马蜂》