Pagini recente » Cod sursa (job #2413150) | Cod sursa (job #1800715) | Cod sursa (job #2560249) | Cod sursa (job #2415703) | Cod sursa (job #1264028)
#include <cstdio>
using namespace std;
int n,aib[100000];
void update (int poz,int val){
for (;poz<=n;poz=poz+(poz &(poz-1)^poz))
aib[poz]+=val;
}
int querry (int poz){
int s;
s=0;
for(;poz;poz=poz-(poz &(poz-1)^poz))
s=s+aib[poz];
return s;
}
int search(int val){
int i, poz;
for (poz=1;poz<n;poz<<=1);
for(i=0;poz;poz/=2){
if(i+poz<=n){
if(val>=aib[i+poz]){
i+=poz;
val-=aib[i];
if (!val)
return i;
}
}
}
return -1;
}
int main(){
FILE *fin, *fout;
int i,a,b,tip,m;
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=0;i<m;i++){
fscanf(fin,"%d",&tip);
if (tip<2){
fscanf(fin,"%d%d",&a,&b);
if (tip==0)
update(a,b);
else
fprintf(fout,"%d\n",querry(b)-querry(a-1));
}
else {
fscanf(fin,"%d",&a);
fprintf(fout,"%d\n",search(a));
}
}
fclose(fin);
fclose(fout);
return 0;
}