Cod sursa(job #2568600)

Utilizator NashikAndrei Feodorov Nashik Data 4 martie 2020 08:32:44
Problema Distincte Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
//#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream cin("distincte.in");
ofstream cout("distincte.out");
bool ms(pair<int,pair<int,int> > a,pair<int,pair<int,int> > b){
    return a.second.first<b.second.first;
}
pair<int,pair<int,int> > query[100005];
int v[100005];
int f[100005];
int aib[100005],n,k,m,ans[100005];
void upd(int a,int val){
    for(;a<=n;a+=(a&(-a))){
        aib[a]+=val;
    }
}
int que(int a){
    int sol=0;
    for(;a>=1;a-=(a&-a)){
        sol+=aib[a];
    }
    return sol;
}
int main()
{
    cin>>n>>k>>m;
    for(int i=1;i<=n;i++){
        cin>>v[i];
    }
    for(int i=1;i<=m;i++){
        cin>>query[i].first>>query[i].second.first;
        query[i].second.second=i;
    }
    sort(query+1,query+m+1,ms);
    int cnt=1;
    for(int i=1;i<=n;i++){
        if(f[v[i]]==0){
            f[v[i]]=i;
            upd(i,v[i]);
        }
        else{
            upd(f[v[i]],-v[i]);
            f[v[i]]=i;
            upd(i,v[i]);
        }
        while(query[cnt].second.first==i and cnt<=m){
            ans[query[cnt].second.second]=que(query[cnt].second.first)-que(query[cnt].first-1);
            cnt++;
        }
    }
    for(int i=1;i<=m;i++){
        cout<<ans[i]<<" ";
    }
    return 0;
}