Pagini recente » Cod sursa (job #2063659) | Cod sursa (job #175168) | Cod sursa (job #1712626) | Cod sursa (job #2564988) | Cod sursa (job #2282678)
#include <bits/stdc++.h>
using namespace std;
const int N=100000+5;
int n,t;
int aib[N];
inline void add(int p,int x)
{
for(int i=p;i<=n;i+=i&(-i))
{
aib[i]+=x;
}
}
inline int prefix(int p)
{
int ans=0;
for(int i=p;i>=1;i-=i&(-i))
{
ans+=aib[i];
}
return ans;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
cin>>n>>t;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
add(i,x);
}
for(int tc=1;tc<=t;tc++)
{
int hulk;
cin>>hulk;
if(hulk==0)
{
int a,b;
cin>>a>>b;
add(a,b);
}
if(hulk==1)
{
int a,b;
cin>>a>>b;
cout<<prefix(b)-prefix(a-1)<<"\n";
}
if(hulk==2)
{
int x;
int now=0;
cin>>x;
int r=0,pas=(1<<19);
while(pas)
{
if(r+pas<=n && now+aib[r+pas]<x)
{
r+=pas;
now+=aib[r];
}
pas>>=1;
}
r++;
if(1<=r && r<=n && prefix(r)==x)
{
cout<<r<<"\n";
}
else
{
cout<<"-1\n";
}
}
}
return 0;
}