Pagini recente » Cod sursa (job #1408246) | Cod sursa (job #817467) | Cod sursa (job #2070484) | Cod sursa (job #836020) | Cod sursa (job #1766751)
#include <iostream>
#include<cstdio>
using namespace std;
unsigned int aib[100001];
int n;
unsigned int query (unsigned int p){
unsigned int rez=0,pow2;
while(p!=0){
rez+=aib[p];
pow2=(p&(-p));
p-=pow2;
}
return rez;
}
void update(unsigned int p,unsigned int val){
unsigned int pow2;
while(p<=n){
aib[p]+=val;
pow2=(p&(-p));
p+=pow2;
}
}
unsigned int searcherino(unsigned int val){
unsigned int i=0,pas=1<<16;
while(pas!=0){
if(i+pas<=n && aib[i+pas]<=val){
i+=pas;
val-=aib[i];
}
pas/=2;
}
if(val==0)
return i;
return -1;
}
int main()
{
int m,i,a,b,var;
FILE*fin,*fout;
fin=fopen("aib.in","r");
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=n;i++){
fscanf(fin,"%d",&a);
update(i,a);
}
fout=fopen("aib.out","w");
for(i=1;i<=m;i++){
fscanf(fin,"%d",&var);
if(var==0){
fscanf(fin,"%d%d",&a,&b);
update(a,b);
}
if(var==1){
fscanf(fin,"%d%d",&a,&b);
fprintf(fout,"%u\n",query(b)-query(a-1));
}
if(var==2){
fscanf(fin,"%d",&a);
fprintf(fout,"%u\n",searcherino(a));
}
}
fclose(fin);
fclose(fout);
return 0;
}