大家好,本菜鸡在练一道莫队题时,突然发现了本地AC提交RE的壮观景象,求各位大神帮忙,谢谢!
#include<bits/stdc++.h>
#define N 1000009
#define M 1000009
using namespace std;
typedef long long ll;
ll n,m,k,kuai,x[N],l=1,r,ans=0,cnt[N],ques[N];
struct edge{ll l,r,kuai,id;};
edge es[M];
bool cmp(const edge&a,const edge&b){return a.kuai<b.kuai||(a.kuai==b.kuai&&a.kuai%2?a.r<b.r:a.r>b.r);}
int main(){
// freopen("P2709_1(1).in","r",stdin);
// freopen("P2709_1(1).out","w",stdout);
cin>>n>>m>>k;
for(ll i=1;i<=n;++i) cin>>x[i];
kuai=sqrt(2500);
for(ll i=1;i<=m;++i)
cin>>es[i].l>>es[i].r,es[es[i].id=i].kuai=(es[i].l/kuai);
sort(es+1,es+m+1,cmp);
for(ll i=1;i<=m;++i){
while(l>es[i].l){--l;ll now=(++cnt[x[l]]);ans+=(2*now-1);}
while(r<es[i].r){++r;ll now=(++cnt[x[r]]);ans+=(2*now-1);}
while(l<es[i].l){ll now=(--cnt[x[l]]);ans-=(2*now+1);l++;}
while(r>es[i].r){ll now=(--cnt[x[r]]);ans-=(2*now+1);r--;}
ques[es[i].id]=ans;
}
for(ll i=1;i<=m;++i) cout<<ques[i]<<" ";
return 0;
}