Pagini recente » Cod sursa (job #2934317) | Cod sursa (job #95438) | Cod sursa (job #78540) | Cod sursa (job #1484393) | Cod sursa (job #2701038)
#include <bits/stdc++.h>
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
const int N = 100010;
int n,m,aib[N];
int suma(int i)
{
int rez=0;
for(; i; i-=i&(-i))
rez+=aib[i];
return rez;
}
void adun(int i,int val)
{
for(; i<=n; i+=i&(-i))
aib[i]+=val;
}
int main()
{
f>>n>>m;
for(int i=1; i<=n; i++)
{
int x;
f>>x;
adun(i,x);
}
for(; m; m--)
{
int tip;
f>>tip;
if(tip==0)
{
int i,x;
f>>i>>x;
adun(i,x);
}
else if(tip==1)
{
int st,dr;
f>>st>>dr;
g<<suma(dr)-suma(st-1)<<'\n';
}
else
{
int lo,hi,mi,val;
f>>val;
lo=0;hi=n;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(suma(mi)<val)
lo=mi;
else
hi=mi;
}
if(suma(hi)!=val)
hi=-1;
g<<hi<<'\n';
}
}
return 0;
}