rt,
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,M=1e5+10;
int n,m,k,a[N],cnt[N],len,s,ans[M];
struct node{
int l,r,rank;
bool operator<(const node &a)const{
return (l/len==a.l/len)?(r<a.r):(l/len<a.l/len);
}
}q[N];
void add(int x){
s+=(2*cnt[a[x]]+1);
cnt[a[x]]++;
}
void del(int x){
s-=(2*cnt[a[x]]-1);
cnt[a[x]]--;
}
int main(){
cin>>n>>m>>k;
len=sqrt(n);
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=m;i++){
cin>>q[i].l>>q[i].r;
q[i].rank=i;
}
sort(q+1,q+1+m);
int l,r,cl=0,cr=0;
for(int i=1;i<=m;i++){
l=q[i].l,r=q[i].r;
while(cl<l)del(cl++);
while(cr<r)add(++cr);
while(cl>l)add(--cl);
while(cr>r)del(cr--);
ans[q[i].rank]=s;
}
for(int i=1;i<=m;i++){
cout<<ans[i]-1<<endl;
}
return 0;
}
输出ans时减1就答案正确了,这是为啥?