Pagini recente » Cod sursa (job #1440036) | Cod sursa (job #977384) | Cod sursa (job #1563624) | Cod sursa (job #1575779) | Cod sursa (job #1199846)
#include<cstdio>
#define ub(x) x&(-x)
using namespace std;
int v[100001];
int n;
void add(int a,int b){
int i;
for(i=a;i<=n;i+=ub(i))
v[i]+=b;
}
int sum(int x){
int i;
int s;
s=0;
for(i=x;i>0;i-=ub(i))
s+=v[i];
return s;
}
int cb(int x){
int st,dr,m,val;
st=1;
dr=n;
while(st<dr){
m=(st+dr)/2;
val=sum(m);
if (val==x) return m;
if (val<x) st=m+1;
else dr=m;
}
if (sum(st)!=x) return -1;
return st;
}
int main(){
freopen ("aib.in","r",stdin);
freopen ("aib.out","w",stdout);
int m,i,a,b,p;
scanf ("%d%d",&n,&m);
for(i=1;i<=n;i++){
scanf ("%d",&a);
add(i,a);
}
for(i=1;i<=m;i++){
scanf ("%d",&p);
if (p==0){
scanf ("%d%d",&a,&b);
add(a,b);
}
else
if (p==1){
scanf ("%d%d",&a,&b);
printf ("%d\n",sum(b)-sum(a-1));
}
else {
scanf ("%d",&a);
printf ("%d\n",cb(a));
}
}
return 0;
}