Pagini recente » Cod sursa (job #2234401) | Cod sursa (job #2490536) | Cod sursa (job #1060154) | Cod sursa (job #2805335) | Cod sursa (job #854209)
Cod sursa(job #854209)
#include <cstdio>
#define slb(x) (x & -x)
using namespace std;
int N, M, A[100001];
void Update(int k,int x)
{ for(; k<=N; k+=slb(k)) A[k]+=x;}
int Query(int k)
{ int s=0;
for(; k>0; k-=slb(k)) s+=A[k];
return s;
}
int Search(int val)
{ int i, step;
for (step=1; step<N; step<<=1);
for(i=0; step; step>>=1)
if(i+step<=N && val>=A[i+step])
{ i+=step; val-=A[i];
if(!val )return i;
}
return -1;
}
int main()
{ int K, X, Y;
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&N,&M);
for(int i=1; i<=N; ++i)
scanf("%d", &Y), Update(i,Y);
while(M--)
{ scanf("%d", &K);
if(K<2)
{ scanf("%d%d",&X,&Y);
if(K) printf("%d\n",Query(Y)-Query(X-1)); else Update(X,Y);
}
else
{ scanf("%d", &X); printf("%d\n", Search(X));}
}
return 0;
}