Pagini recente » Cod sursa (job #1179626) | Cod sursa (job #1596531) | Cod sursa (job #2456500) | Cod sursa (job #1623492) | Cod sursa (job #2186532)
#include <iostream>
#include <cstdio>
using namespace std;
int aib[100005],n,m;
void update(int poz,int val)
{
while(poz<=n)
{
aib[poz]+=val;
poz+=(poz&-poz);
}
}
int sum(int poz)
{
int rasp=0;
while(poz>0)
{
rasp+=aib[poz];
poz-=(poz&-poz);
}
return rasp;
}
int query(int val,int st=1,int dr=n)
{
int mij,sumc;
while(st<=dr)
{
mij=(st+dr)/2;
sumc=sum(mij);
if(sumc==val)
return mij;
if(val<=sumc)
dr=mij-1;
else
st=mij+1;
}
return -1;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
scanf("%d%d",&n,&m);
int elem,t,a,b;
for(int i=1;i<=n;i++)
{
scanf("%d",&elem);
update(i,elem);
}
while(m--)
{
scanf("%d",&t);
switch (t)
{
case 0:
scanf("%d%d",&a,&b);
update(a,b);
break;
case 1:
scanf("%d%d",&a,&b);
printf("%d\n",sum(b)-sum(a-1));
break;
case 2:
scanf("%d",&a);
printf("%d\n",query(a));
break;
}
}
return 0;
}