Pagini recente » Cod sursa (job #2417436) | Cod sursa (job #1922350) | Cod sursa (job #2776988) | Cod sursa (job #1131090) | Cod sursa (job #556520)
Cod sursa(job #556520)
#include <iostream>
#include<stdio.h>
#define dim 150150
int a,b,c[dim],n,m,k;
int bit(int x)
{
return x&(-x);
/* int nr;
while ( i%2 == 0 )
{
nr ++ ;
i/=2;
}
int el =1;
for(int k=0 ; k<=nr ; k++)
el = el*2;
return el;*/
}
int querry(int x )
{
int s=0;
for(int i=x ; i>=1 ; i-=bit(i))
{
s+=c[i];
}
return s;
}
void update(int poz , int x)
{
for(int i=poz ; i<=n ; i+=bit(i))
c[i]+=x;
}
int find (int x)
{
int st = 1,dr = n,y,mid;
while ( st<=dr)
{
mid = (st + dr)/2;
y=querry(mid);
if ( y==x)
return mid ;
else
if ( y>x)
dr = mid -1;
else
st = mid+1;
}
return -1;
}
void solve()
{
int x;
scanf("%d %d",&n,&k );
for(int i=1 ; i<=n;i++)
{
scanf("%d",&x );
update ( i , x );
}
int op;
for(int i=1 ; i<=k ; i++)
{
scanf("%d",&op);
if ( op==0 )
{
scanf("%d %d",&a , &b);
update (a,b);
}
else
if ( op == 1 )
{
scanf("%d %d",&a,&b);
printf("%d\n",querry(b)-querry(a-1));
}
else
if ( op == 2 )
{
scanf("%d",&a);
printf("%d\n",find(a));
}
}
}
using namespace std;
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
solve();
return 0;
}