1 #include <bits/stdc++.h>
2 #define nmax 50010
3
4 using namespace std;
5 int a[nmax],ta[nmax],cnt[nmax]={0};
6 int n,m,qn,k;
7 struct que{
8 int l,r,p,id;
9 bool operator < (const que& x) const{ return (x.p==p)?(x.r>r):(x.p>p); }
10 }q[nmax];
11
12 int main(){
13 scanf("%d%d%d",&n,&qn,&k);
14 m=sqrt(n);
15 for (int i=1; i<=n; i++) scanf("%d",&a[i]);
16 for (int i=1; i<=qn; i++) {
17 scanf("%d%d",&q[i].l,&q[i].r);
18 q[i].p=(q[i].l-1)/m;
19 q[i].id=i;
20 }
21 sort(q+1,q+qn+1);
22 int l=q[1].l,r=q[1].l-1,ans=0;
23 for (int i=1; i<=qn; i++) {
24 while(l>q[i].l) l--,ans+=(2*cnt[a[l]]+1),cnt[a[l]]++;
25 while(r<q[i].r) r++,ans+=(2*cnt[a[r]]+1),cnt[a[r]]++;
26 while(l<q[i].l) ans-=(2*cnt[a[l]]-1),cnt[a[l]]--,l++;
27 while(r>q[i].r) ans-=(2*cnt[a[r]]-1),cnt[a[r]]--,r--;
28 ta[q[i].id]=ans;
29 }
30 for (int i=1; i<=qn; i++) printf("%d\n",ta[i]);
31 return 0;
32 }