Pagini recente » Cod sursa (job #1563161) | Cod sursa (job #2586124) | Cod sursa (job #191032) | Cod sursa (job #1290629) | Cod sursa (job #838954)
Cod sursa(job #838954)
#include<cstdio>
#define NMAX 100100
#define LSB(x) (x&(-x))
int x,y,op,n,m;
int arb[NMAX];
void update(int poz, int x)
{
for(;poz<=n;poz+=LSB(poz))
arb[poz]+=x;
}
int querymuie(int poz)
{
int sum=0;
for(;poz>0;poz-=LSB(poz))
sum+=arb[poz];
return sum;
}
int cautare(int a)
{
int m,x=1,y=n;
while(x<=y)
{
m=(x+y)/2;
if(querymuie(m)<a)
x=m+1;
else
if(querymuie(m)>a)
y=m-1;
else
return m;
}
return -1;
}
int main()
{
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);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
switch(op)
{
case 0:{
scanf("%d%d",&x,&y);
update(x,y);
break;
}
case 1:{
scanf("%d%d",&x,&y);
printf("%d\n",querymuie(y)-querymuie(x-1));
break;
}
case 2:{
scanf("%d",&x);
printf("%d\n",cautare(x));
break;
}
}
}
return 0;
}