Pagini recente » Cod sursa (job #380695) | Cod sursa (job #645234) | Cod sursa (job #919001) | Cod sursa (job #1758054) | Cod sursa (job #389227)
Cod sursa(job #389227)
#include <stdio.h>
int n=0,m=0;
int tree[100001];
int read(int idx){
int sum=0;
while (idx>0){
sum+=tree[idx];
idx-=(idx & -idx);
}
return sum;
}
void update(int idx,int val){
while(idx<=n){
tree[idx]+=val;
idx+= (idx & -idx);
}
}
int elso(int a){
int lo=1,hi=n,mid,temp;
while (lo<=hi){
mid=lo+(hi-lo)/2;
temp=read(mid);
if (temp==a){return mid;}
else if (temp<a){lo=mid+1;}
else {hi=mid-1;}
}
return -1;
}
int main(void){
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
tree[0]=0;
int i=0,temp,a,b;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&temp);
update(i,temp);
}
for(i=1;i<=m;i++){
scanf("%d",&temp);
switch(temp){
case 0:
scanf("%d %d",&a,&b);
update(a,b);
break;
case 1:
scanf("%d %d",&a,&b);
printf("%d\n",read(b)-read(a-1));
break;
case 2:
scanf("%d",&a);
printf("%d\n",elso(a));
break;
}
}
return 0;
}