Pagini recente » Istoria paginii runda/26_februarie_simulare_oji_2024_clasa_10/clasament | Cod sursa (job #2701232) | Cod sursa (job #1101339) | Cod sursa (job #2278735) | Cod sursa (job #2132450)
#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;
}