Pagini recente » Cod sursa (job #2748996) | Flux si cuplaj | Cod sursa (job #2707230) | Cod sursa (job #400699) | Cod sursa (job #1980380)
#include <bits/stdc++.h>
using namespace std;
ifstream in("distincte.in");
ofstream out("distincte.out");
const int Nmax = 100001;
vector<int> ps[Nmax],qs[Nmax];
long long Ans[Nmax];
int Qx[Nmax],Qy[Nmax];
int v[Nmax],idx[Nmax];
int N,M,K;
long long A[Nmax];
int lsb(int x){return x&(-x);}
void upd(int x,long long val){while(x<=N) A[x]+=val,x+=lsb(x);}
long long query(int x){long long s=0;while(x) s+=A[x],x-=lsb(x);return s;}
long long intq(int a,int b){return query(b)-query(a-1);}
int main(){
in>>N>>K>>M;
for(int i=1;i<=N;i++){
in>>v[i];
ps[v[i]].push_back(i);
}
for(int i=1;i<=M;i++){
in>>Qx[i]>>Qy[i];
qs[Qy[i]].push_back(i);
}
for(int i=1;i<=N;i++){
upd(i,v[i]);
idx[v[i]]++;
if(idx[v[i]]>1){
int j=ps[v[i]][idx[v[i]]-2];
upd(j,-v[j]);
}
for(auto it : qs[i]){
Ans[it]=intq(Qx[it],Qy[it]);
}
}
for(int i=1;i<=M;i++){
out<<Ans[i]<<'\n';
}
return 0;
}