Pagini recente » Cod sursa (job #128035) | Cod sursa (job #1064601) | Cod sursa (job #462614) | Cod sursa (job #1875933) | Cod sursa (job #767320)
Cod sursa(job #767320)
#include <cstdio>
#define MAX 100001
int n,a[MAX];
void update(int idx,int val){
while( idx <= n )
{
a[idx] += val;
idx += idx & -idx;
}
}
int read(int idx){
int sum = 0;
while( idx > 0 )
{
sum += a[idx];
idx -= idx & -idx;
}
return sum;
}
int cbin(int x){
int l = 1,r = n,m;
while( l < r )
{
m = (l+r)/2;
if( read(m) >= x )r = m; else l = m + 1;
}
return read(l) == x ? l : -1;
}
int main(){
int m,c,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",&x);
update(i,x);
}
while(m--)
{
scanf("%d",&c);
if(c == 2)
{
scanf("%d",&x);
printf("%d\n",cbin(x));
}else{
scanf("%d %d",&x,&y);
if(c == 0)update(x,y); else printf("%d\n",read(y)-read(x-1));
}
}
return 0;
}