Pagini recente » Cod sursa (job #358929) | Cod sursa (job #2139893) | Cod sursa (job #1480088) | Cod sursa (job #1494425) | Cod sursa (job #3238607)
#include <fstream>
#define int long long
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
int aib[100001],n,i,m,v[100001];
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);
}
else
{
cin>>k;
int st=0,dr=n+1;
while(st+1<dr)
{
int mid=(st+dr)/2;
if(query(mid)<k)
st=mid;
else
dr=mid;
}
if(query(dr)==k)
cout<<dr<<'\n';
else
cout<<-1<<'\n';
}
}
return 0;
}