#include #include #include #include #include #include #include #include #define lowbit(x) ((x)&(-(x))) using namespace std; const int maxn=5e5+10; int a[maxn],N,Q,mp[maxn],QL[maxn],QR[maxn],qid[maxn],res[maxn]; int BST[maxn]; int L1[maxn],L2[maxn],L3[maxn]; bool cmp(int q1,int q2) { return (QR[q1]!=QR[q2])?QR[q1] st; for(int i=1;i<=N;i++) { scanf("%d",&a[i]); st.insert(a[i]); } map hsh; int hcnt=0; for(auto it=st.begin();it!=st.end();it++) hsh[*it]=++hcnt; for(int i=1;i<=N;i++) a[i]=hsh[a[i]]; for(int i=1;i<=Q;i++) { scanf("%d%d",&QL[i],&QR[i]); qid[i]=i; } sort(qid+1,qid+1+Q,cmp); int qp=1; for(int i=1;i<=N;i++) { Add(L3[a[i]],+1); L3[a[i]]=L2[a[i]]; Add(L3[a[i]],-1); Add(L2[a[i]],-1); L2[a[i]]=L1[a[i]]; Add(L2[a[i]],+1); L1[a[i]]=i; while(QR[qid[qp]]==i) { res[qid[qp]]=query(i)-query(QL[qid[qp]]-1); qp++; } } for(int i=1;i<=Q;i++) printf("%d\n",res[i]); return 0; }