莫名其妙0分全WA
还是死在第几百、几千个输出
#include<bits/stdc++.h>
using namespace std;
#define N 1000005
#define int unsigned long long
int n,m;
int a[N],cnt[N],l=1,r,now;
int ans[N];
int belong[N];
struct st{
int l,r,time;
bool operator < (const st&oth)const{
if(belong[l]!=belong[oth.l])return belong[l]<belong[oth.l];
return (r<oth.r)^(belong[l]&1);
}
}q[N];
void f(){
for(int i=1;i<=m;i++){
while(l>q[i].l)now+=1+(cnt[a[l-1]]<<1),++cnt[a[--l]];
while(r<q[i].r)now+=1+(cnt[a[r+1]]<<1),++cnt[a[++r]];
while(l<q[i].l)now+=1-(cnt[a[l]]<<1),--cnt[a[l++]];
while(r>q[i].r)now+=1-(cnt[a[r]]<<1),--cnt[a[r--]];
ans[q[i].time]=now;
}
}
int k;
signed main(){
cin>>n>>m>>k;
int blk=max(n/sqrt(m),1.0);
for(int i=1;i<=n;i++)
belong[i]=(i-1)/blk + 1;
for(int i=1;i<=n;i++)
scanf("%llu",&a[i]);
for(int i=1;i<=m;i++)
scanf("%llu%llu",&q[i].l,&q[i].r),q[i].time=i;
sort(q+1,q+m+1);
f();
for(int i=1;i<=m;i++)
printf("%llu\n",ans[i]);
}