Pagini recente » Cod sursa (job #289369) | Cod sursa (job #1450957) | Cod sursa (job #1695365) | Cod sursa (job #1204657) | Cod sursa (job #2089143)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int zeros(int x)
{
return (x^(x-1))&x;
}
int n,m,i,x,b,c,j,ans;
int a[100001];
void build()
{
for(int q=1;q<=n;q++)
if(zeros(q)+q<=n)
a[zeros(q)+q]+=a[q];
}
void update(int p,int x)
{
for(;p<=n;p+=zeros(p))
a[p]+=x;
}
int query(int x)
{
int ans=0;
for(;x>0;x-=zeros(x))
ans+=a[x];
return ans;
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
fin>>a[i];
build();
for(i=1;i<=m;i++)
{
fin>>x>>b;
if(x==0||x==1)fin>>c;
if(x==0)
update(b,c);
else if(x==1)
{
fout<<query(c)-query(b-1)<<'\n';
}
else
{
for(j=1;j<=n;j<<=1);
ans=0;
for(;j;j>>=1)
if(ans+j<=n)
if(query(ans+j)<b)
ans+=j;
if(query(ans+1)==b)
{
fout<<ans+1<<'\n';
}
else fout<<-1<<'\n';
}
}
return 0;
}