【BZOJ】【P3781】【小B的询问】【莫队】【400T留念】

来源:互联网 发布:51单片机驱动风扇 编辑:程序博客网 时间:2024/05/20 09:08

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3781

无脑莫队

400T留念


Code:

#include<bits/stdc++.h>#define sqr(x) ((x)*(x))using namespace std;const int maxn=50010;int n,m,k,sqrtn;int getint(){int res=0;char c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))res=res*10+c-'0',c=getchar();return res;}int a[maxn],anss[maxn];int c[maxn],L,R;int ans=0;struct qes{int l,r,id;bool operator<(qes oth)const{return l/sqrtn<oth.l/sqrtn||(l/sqrtn==oth.l/sqrtn&&r<oth.r);}}q[maxn];int main(){n=getint();m=getint();k=getint();sqrtn=sqrt(n);for(int i=1;i<=n;i++)a[i]=getint();for(int i=1;i<=m;i++)q[i].l=getint(),q[i].r=getint(),q[i].id=i;sort(q+1,q+1+m);c[a[1]]++;L=R=1;ans=1;for(int i=1;i<=n;i++){while(L>q[i].l){L--;c[a[L]]++;ans=ans-sqr(c[a[L]]-1)+sqr(c[a[L]]);}while(R<q[i].r){R++;c[a[R]]++;ans=ans-sqr(c[a[R]]-1)+sqr(c[a[R]]);}while(L<q[i].l){c[a[L]]--;ans=ans-sqr(c[a[L]]+1)+sqr(c[a[L]]);L++;}while(R>q[i].r){c[a[R]]--;ans=ans-sqr(c[a[R]]+1)+sqr(c[a[R]]);R--;}anss[q[i].id]=ans;}for(int i=1;i<=m;i++)printf("%d\n",anss[i]);return 0;}


0 0