#include <bits/stdc++.h>
using namespace std;
const int N = 51114;
int n, m, k;
struct query
{
int l, r, id;
};
query q[N];
int a[N];
int ans[N];
int len;
int cs[N];
int tmp;
int lp, rp;
int get(int x)
{
return x / len;
}
bool cmp(query i, query j)
{
int ii = get(i.l);
int jj = get(j.l);
if(ii != jj)
return ii < jj;
return i.r < j.r;
}
void add(int x)
{
tmp += 2 * cs[x] + 1;
cs[x] ++;
}
void del(int x)
{
tmp -= 2 * cs[x] - 1;
cs[x] --;
}
int main()
{
cin >> n >> m >> k;
len = sqrt(m);
for(int i = 1; i <= n; i = i + 1)
cin >> a[i];
for(int i = 1; i <= m; i = i + 1)
{
int l, r;
cin >> l >> r;
q[i] = (query){l, r, i};
}
sort(q + 1, q + 1 + m, cmp);
for(int i = 1; i <= m; i = i + 1)
{
int l = q[i].l;
int r = q[i].r;
while(lp < l)
del(a[lp]), lp ++;
while(lp > l)
lp --, add(a[lp]);
while(rp < r)
rp ++, add(a[rp]);
while(rp > r)
del(a[rp]), rp --;
ans[q[i].id] = tmp;
}
for(int i = 1; i <= m; i = i + 1)
cout << ans[i] - 1 << "\n";
return 0;
}
最后的 ans 为啥要减 1 呢
没想明白