Pagini recente » Cod sursa (job #1301117) | Cod sursa (job #3174840) | Cod sursa (job #2596974) | Cod sursa (job #174446) | Cod sursa (job #2715844)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
long long Lbuck;
struct Query
{
long long l, r, orig;
bool operator < (const Query &other) const
{
if(l / Lbuck == other.l / Lbuck)
return r < other.r;
return l / Lbuck < other.l / Lbuck;
}
}queries[100005];
long long fv[100005], sol, v[100005];
long long ans[100005];
void ADD(long long poz)
{
fv[v[poz]]++;
if(fv[v[poz]] == 1)
sol += v[poz];
}
void DEL(long long poz)
{
fv[v[poz]]--;
if(fv[v[poz]] == 0)
sol -= v[poz];
}
int main()
{
long long N, M, K;
fin >> N >> K >> M;
Lbuck = sqrtl(N);
for(long long i = 1; i <= N; i++)
fin >> v[i];
for(long long i = 1; i <= M; i++)
{
fin >> queries[i].l >> queries[i].r;
queries[i].orig = i;
}
sort(queries + 1, queries + M + 1);
long long st = 1, dr = 0;
for(long long i = 1; i <= M; i++)
{
long long l = queries[i].l;
long long r = queries[i].r;
while(dr < r)
dr++, ADD(dr);
while(st < l)
DEL(st), st++;
while(dr > r)
DEL(dr), dr--;
while(st > l)
st--, ADD(st);
ans[queries[i].orig] = sol;
}
for(long long i = 1; i <= M; i++)
fout << ans[i] << '\n';
return 0;
}