Pagini recente » Cod sursa (job #2708112) | Cod sursa (job #956769) | Cod sursa (job #285854) | Cod sursa (job #274870) | Cod sursa (job #3337418)
#include <bits/stdc++.h>
#define in fin
#define out fout
#define int long long
using namespace std;
const int NMAX = 1e5 + 5;
ifstream fin("distincte.in");
ofstream fout("distincte.out");
int aib[NMAX];
void add(int p, int x){
while(p < NMAX){
aib[p] += x;
p += (p & (-p));
}
}
int query(int p){
int sum = 0;
while(p){
sum += aib[p];
p -= (p & (-p));
}
return sum;
}
int lp[NMAX];
vector< pair<int, int> > endss[NMAX];
signed main()
{
int n, k, q; in >> n >> k >> q;
int v[n];
for(int i = 0; i < n; i++) in >> v[i];
for(int i = 1; i <= k; i++) lp[i] = -1;
int sol[q];
for(int i = 0; i < q; i++){
int l, r; in >> l >> r;
l--; r--;
endss[r].push_back({l, i});
}
for(int i = 0; i < n; i++){
add(i + 1, v[i]);
if(lp[v[i]] != -1) add(lp[v[i]] + 1, -v[i]);
lp[v[i]] = i;
for(const pair<int, int> &x : endss[i]){
sol[x.second] = query(i + 1) - query(x.first);
}
}
for(int i = 0; i < q; i++) out << sol[i] << "\n";
return 0;
}