其中Add,Sub根据题意而定
#include<bits/stdc++.h>
using namespace std;
const int N = 200010;
int a[N];
int ans[N];
int pos[N];
struct Q{
int l,r,k;
}q[N];
bool cmp2(Q x,Q y){
if(pos[x.l] == pos[y.l]) return x.r < y.r;
return pos[x.l] < pos[y.l];
}
int res;
int main(){
int n,m;
cin >> n >> m;
int siz = sqrt(n);
for(int i = 1;i <= n;i ++){
cin >> a[i];
pos[i] = i / siz;
}
for(int i = 0;i < m;i ++){
cin >> q[i].l >> q[i].r;
q[i].k = i;
}
sort(q,q + m,cmp2);
int l = 1,r = 0;
for(int i = 0;i < m;i ++){
while(q[i].l < l) Add(-- l);
while(q[i].r > r) Add(++ r);
while(q[i].l > l) Sub(l ++);
while(q[i].r < r) Sub(r --);
ans[q[i].k] = res;
}
for(int i = 0;i < m;i ++)
cout << ans[i] << endl;
return 0;
}