Pagini recente » Cod sursa (job #932453) | Cod sursa (job #409285) | Cod sursa (job #1397495) | Cod sursa (job #2825875) | Cod sursa (job #279975)
Cod sursa(job #279975)
#include<stdio.h>
#define N 100005
FILE *f=fopen("aib.in","r");
FILE *g=fopen("aib.out","w");
int n, m,A[N];
void add(int poz,int val){
for(;poz<=n;){
A[poz]+=val;
poz+=(poz ^ (poz-1))&poz;
}
}
int suma(int poz){
int suma=0;
for(;poz;){
suma+=A[poz];
poz-=(poz ^ (poz-1))&poz;
}
return suma;
}
int search(int sum){
int st,dr,mj,s;
st=1;dr=n;
while(st<=dr){
mj = (st+dr)>>1;
s=suma(mj);
if(s > sum) dr=mj-1;
else st=mj+1;
}
if(suma(dr)!=sum)return -1;
return dr;
}
int main(){
int o,i,a,b;
fscanf(f,"%d%d",&n,&m);
for(i=1;i<=n;i++){ fscanf(f,"%d",&a); add(i,a); }
for(;m--;){
fscanf(f,"%d",&o);
if(o>1){
fscanf(f,"%d",&a);
fprintf(g,"%d\n",search(a));
}else{ fscanf(f,"%d%d",&a,&b);
if(!o) add(a,b);//el. de pe poz. a += b
else { fprintf(g,"%d\n",suma(b)-suma(a-1)); }
}
}
return 0;
}