Pagini recente » Cod sursa (job #2438053) | Cod sursa (job #579942) | ONIS 2014, Clasament Runda 1 | Cod sursa (job #482130) | Cod sursa (job #1262925)
#include<cstdio>
using namespace std;
const int NMAX=100005;
int aib[NMAX],n;
inline void update(int poz, int val)
{
for( ;poz <= n; poz+=poz&(poz-1)^poz)
aib[poz]+=val;
}
inline int query(int poz)
{
int s=0;
for( ;poz ;poz-=poz&(poz-1)^poz)
s+=aib[poz] ;
return s ;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
int m,val,op,a,b;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",&val);
update(i,val);
}
for(int i=1;i<=m;i++)
{
scanf("%d",&op);
if(op==0)
{
scanf("%d%d",&a,&b);
update(a,b);
}
if(op==1)
{
scanf("%d%d",&a,&b);
printf("%d\n",query(b)-query(a-1));
}
if(op==2)
{
scanf("%d",&a);
int st=1,dr=n;
int ans=-1;
while(st<=dr)
{
int mid=(st+dr)/2;
int x=query(mid);
if(x>=a)
{
if(x==a)
{
ans=mid;
break;
}
dr=mid-1;
}
else
st=mid+1;
}
printf("%d\n",ans);
}
}
return 0;
}