Pagini recente » Cod sursa (job #3130455) | Cod sursa (job #1323667) | Cod sursa (job #2557346) | Cod sursa (job #96634) | Cod sursa (job #3238614)
#include <fstream>
#include <cmath>
#define int long long
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int aib[100001],n,i,m,v[100001],poz,p2;
void upd(int pos,int val)
{
for(int j=pos;j<=n;j=j+(j&(-j)))
aib[j]+=val;
}
int query(int pos)
{
int s=0;
for(int j=pos;j>=1;j=j-(j&(-j)))
s+=aib[j];
return s;
}
int32_t main()
{
cin>>n>>m;
int a,b,k;
for(i=1; i<=n; i++)
{
int elem;
cin>>elem;
upd(i,elem);
}
for(i=1; i<=m; i++)
{
short c;
cin>>c;
if(c==0)
{
cin>>a>>b;
upd(a,b);
}
else if(c==1)
{
cin>>a>>b;
cout<<query(b)-query(a-1)<<'\n';
}
else
{
cin>>k;
p2=(1<<(int)log2(n));
poz=0;
int s=0;
for(;p2>=1;p2=p2/2)
if(s+aib[poz+p2]<k)
{
s=s+aib[poz+p2];
poz=poz+p2;
}
if(poz==n)
cout<<-1<<'\n';
else
cout<<poz+1<<'\n';
}
}
return 0;
}