Pagini recente » Cod sursa (job #1580763) | Cod sursa (job #550401) | Cod sursa (job #983291) | Cod sursa (job #1476373) | Cod sursa (job #2273681)
#include <iostream>
#include <cstdio>
using namespace std;
const int N=100000+5;
int n,q;
int aib[N];
inline void add(int poz,int x)
{
for(int i=poz;i<=n;i+=i&(-i))
{
aib[i]+=x;
}
}
inline int prefix(int poz)
{
int ans=0;
for(int i=poz;i>=1;i-=i&(-i))
{
ans+=aib[i];
}
return ans;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
add(i,x);
}
for(int tc=1;tc<=q;tc++)
{
int type;
cin>>type;
if(type==0)
{
int a,b;
cin>>a>>b;
add(a,b);
}
if(type==1)
{
int a,b;
cin>>a>>b;
cout<<prefix(b)-prefix(a-1)<<"\n";
}
if(type==2)
{
int x;
cin>>x;
int r=0,pas=(1<<17);
int cur=0;
while(pas)
{
if(r+pas<=n && cur+aib[r+pas]<x)
{
cur+=aib[r];
r+=pas;
}
pas/=2;
}
r++;
/// cout<<r<<" "<<prefix(r)<<"\t";
if(1<=r && r<=n && prefix(r)==x) cout<<r<<"\n";
else cout<<"-1\n";
}
}
return 0;
}