Pagini recente » Cod sursa (job #1101810) | Cod sursa (job #1588910) | Cod sursa (job #540477) | Cod sursa (job #1333438) | Cod sursa (job #1638801)
#include <iostream>
#include <stdio.h>
#define zeros(x) (x&(-x))
using namespace std;
const int N = 100001;
int n,m,aib[N];
void update(int i,int val)
{
for(i;i<=n;i+=zeros(i))
aib[i]+=val;
}
int querry(int i)
{
int s=0;
for(i;i>0;i-=zeros(i))
s+=aib[i];
return s;
}
int bin_search(int st,int dr,int x)
{
if(st>=dr)
if(querry(st)!=x)
return -1;
else
return dr;
int mij=(st+dr)/2,k=querry(mij);
if(k==x)
return mij;
if(k<x)
return bin_search(mij+1,dr,x);
return bin_search(st,mij,x);
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d %d",&n,&m);
int i,x;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
update(i,x);
}
for(i=1;i<=m;i++)
{
int a,b,c;
scanf("%d",&a);
if(a==0)
{
scanf("%d %d",&b,&c);
update(b,c);
}
else
if(a==1)
{
scanf("%d %d",&b,&c);
printf("%d\n",(querry(c)-querry(b-1)));
}
else
if(a==2)
{
scanf("%d",&b);
printf("%d\n",bin_search(1,n,b));
}
}
return 0;
}