Pagini recente » Cod sursa (job #930871) | Cod sursa (job #2829429) | Cod sursa (job #1327824) | Cod sursa (job #2896632) | Cod sursa (job #3251799)
#include <bits/stdc++.h>
using namespace std;
const int MAX = 3 * 1e5;
int lastap[MAX + 3], A[MAX + 3];
long long aib[MAX + 3];
int N, K, Q;
vector<pair<int, int>>query[MAX + 3];
long long ans1[MAX + 3];
void update(int poz, int val) {
for(int i = poz; i <= N; i += (i & (-i))) {
aib[i] += val;
}
}
long long query1(int poz) {
long long ans = 0;
for(int i = poz; i > 0; i -= (i & (-i))) {
ans += aib[i];
}
return ans;
}
int main() {
freopen("distincte.in", "r", stdin);
freopen("distincte.out", "w", stdout);
cin >> N >> K >> Q;
for(int i = 1; i <= N; i++) {
cin >> A[i];
}
for(int i = 1; i <= Q; i++) {
int le, ri; cin >> le >> ri;
query[ri].push_back({le, i});
}
for(int i = 1; i <= N; i++) {
if(lastap[A[i]]) {
update(lastap[A[i]], -A[i]);
}
update(i, A[i]);
lastap[A[i]] = i;
for(auto j : query[i]) {
int le = j.first;
int ri = i;
long long ans = query1(ri) - query1(le - 1);
ans1[j.second] = ans;
}
}
for(int i = 1; i <= Q; i++) {
cout << ans1[i] << '\n';
}
}