Pagini recente » Cod sursa (job #1869292) | Cod sursa (job #1348457) | Cod sursa (job #31161) | Cod sursa (job #663427) | Cod sursa (job #2576958)
#include <bits/stdc++.h>
const int inf=2e9;
const int nmax=1e5+3;
typedef long long ll;
using namespace std;
ll n,m;
ll f[nmax];
ll sum(ll r)
{
ll l=r-1,res=0;
while(l>=0)
{
res+=f[l];
l=(l&(l+1))-1;
}
return res;
}
void inc(ll i,ll x)
{
while(i<n)
{
f[i]+=x;
i=(i|(i+1));
}
}
ll cauta(ll x)
{
ll st=0,dr=n;
while(st<=dr)
{
ll mid=(st+dr)/2;
ll res=sum(mid);
if(res>x) dr=mid-1; else
if(res<x) st=mid+1; else return(mid);
}
return -1;
}
int main()
{
ios_base::sync_with_stdio(false);cin.tie(0);cerr.tie(0);cout.tie(0);
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
cin>>n>>m;
for(ll i=0;i<n;i++)
{
ll x;
cin>>x;
inc(i,x);
}
while(m--)
{
ll k;
cin>>k;
if(k==0)
{
ll i,x;
cin>>i>>x;
inc(i-1,x);
} else
if(k==1)
{
ll st,dr;
cin>>st>>dr;
cout<<sum(dr)-sum(st-1)<<"\n";
} else
if(k==2)
{
ll x;
cin>>x;
cout<<cauta(x)<<"\n";
}
}
}