Cod sursa(job #2132450)

Utilizator andreiutu111Noroc Andrei Mihail andreiutu111 Data 15 februarie 2018 19:35:26
Problema Distincte Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<fstream>
using namespace std;
ifstream f("distincte.in");
ofstream g("distincte.out");
int N,K,M,s,val,ind,Arb[400101];
bool n[100001],ok;
void Add(int nod,int st,int dr){
    if(st==dr){
        Arb[nod]=val;
        return;
    }
    int mij=(st+dr)/2;
    if(ind<=mij)Add(2*nod,st,mij);
    else Add(2*nod+1,mij+1,dr);
    Arb[nod]=Arb[2*nod]+Arb[2*nod+1];
}
void verf(int nod,int st,int dr){
    if(st==dr){
        if(n[Arb[nod]]==1)ok=0;
        else n[Arb[nod]]=1;
        return;
    }
    int mij=(st+dr)/2;
    if(ok){
        if(st<=mij)verf(2*nod,st,mij);
        else verf(2*nod+1,mij+1,dr);
    }
}
void Query(int nod,int st,int dr){
    if(ind<=st&&dr<=val){
        ok=1;
        verf(nod,st,dr);
        if(ok)s+=Arb[nod];
        return;
    }
    int mij=(st+dr)/2;
    if(ind<=mij)Query(2*nod,st,mij);
    if(mij<val)Query(2*nod+1,mij+1,dr);
}
int main()
{
    f>>N>>K>>M;
    for(int i=1;i<=N;++i){
        f>>val;
        ind=i;
        Add(1,1,N);
    }
    while(M--){
        f>>ind>>val;
        s=0;
        Query(1,1,N);
        g<<s<<'\n';
        for(int i=1;i<=K;++i)n[i]=0;
    }
    return 0;
}