Pagini recente » Cod sursa (job #646066) | Cod sursa (job #132591) | Cod sursa (job #201986) | Cod sursa (job #289570) | Cod sursa (job #3193757)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100001;
int n,m,aib[N];
int suma(int p)
{
int ret=0;
for(int i=p;i>0;i-=i&(-i))
ret+=aib[i];
return ret;
}
void aduna(int p,int val)
{
for(int i=p;i<=n;i+=i&(-i))
aib[i]+=val;
}
int main()
{
f>>n>>m;
for(int i=1;i<=n;i++)
{
int x;
f>>x;
aduna(i,x);
}
for(int i=1;i<=m;i++)
{
int tip;
f>>tip;
if(tip==0)
{
int poz,val;
f>>poz>>val;
aduna(poz,val);
}
else if(tip==1)
{
int st,dr;
f>>st>>dr;
g<<suma(dr)-suma(st-1)<<'\n';
}
else
{
int k;
f>>k;
int lo=0,hi=n,mi;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(suma(mi)<k)
lo=mi;
else
hi=mi;
}
if(suma(hi)!=k)
hi=-1;
g<<hi<<'\n';
}
}
return 0;
}