Pagini recente » Cod sursa (job #845346) | Rating Dibu Matei (Dibu) | Cod sursa (job #2788295) | Cod sursa (job #2519142) | Cod sursa (job #2450950)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("distincte.in");
ofstream fout ("distincte.out");
const int N = 100002;
struct skrr {
int x, y, i;
} q[N];
bool cmp (skrr a, skrr b) {
return a.y < b.y;
}
int last[N], aib[N], v[N], ans[N];
int n, k, m;
void update (int x, int val) {
for (int i = x; i <= n; i += (i & -i))
aib[i] += val;
}
int query (int x) {
int sum = 0;
for (int i = x; i > 0; i -= (i & -i))
sum += aib[i];
return sum;
}
int main()
{
fin >> n >> k >> m;
for (int i = 1; i <= n; i++)
fin >> v[i];
for (int i = 1; i <= m; i++) {
fin >> q[i].x >> q[i].y;
q[i].i = i;
}
sort(q + 1, q + m + 1, cmp);
int p = 1;
for (int i = 1; i <= n; i++) {
if (last[v[i]] != 0)
update(last[v[i]], -v[i]);
update(i, v[i]);
last[v[i]] = i;
int x = query(i);
while (p <= m && q[p].y == i) {
ans[q[p].i] = x - query(q[p].x - 1);
p++;
}
}
for (int i = 1; i <= m; i++)
fout << ans[i] << "\n";
return 0;
}