Pagini recente » Cod sursa (job #3214748) | Cod sursa (job #1633649) | Cod sursa (job #1298666) | Cod sursa (job #1097109) | Cod sursa (job #3258265)
#include <fstream>
#include <algorithm>
#define nmax 100001
using namespace std;
ifstream cin("distincte.in");
ofstream cout("distincte.out");
int n,k,m,v[nmax],p,fr[nmax],aib[nmax],sol[nmax];
struct elem{
int st,dr,ind;
}q[nmax];
bool cmp(const elem& a,const elem& b){
return a.dr<b.dr;
}
void update(int p,int val){
for(;p<=n;p+=(-p)&p)
aib[p]+=val;
}
int query(int p){
int r=0;
for(;p>0;p-=(-p)&p)
r+=aib[p];
return r;
}
int main()
{
cin>>n>>k>>m;
for(int i=1;i<=n;i++)
cin>>v[i];
for(int i=1;i<=m;i++){
cin>>q[i].st>>q[i].dr;
q[i].ind=i;
}
sort(q+1,q+m+1,cmp);
p=1;
for(int i=1;i<=m;i++){
while(p<=q[i].dr){
if(fr[v[p]]!=0)
update(fr[v[p]],-v[p]);
fr[v[p]]=p;
update(p,v[p]);
p++;
}
sol[q[i].ind]=query(q[i].dr)-query(q[i].st-1);
}
for(int i=1;i<=m;i++)
cout<<sol[i]<<'\n';
return 0;
}