Cod sursa(job #3258265)

Utilizator Dia3141Costea Diana Stefania Dia3141 Data 21 noiembrie 2024 17:46:55
Problema Distincte Scor 35
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.01 kb
#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;
}