Pagini recente » Cod sursa (job #3148775) | Cod sursa (job #2238316) | Cod sursa (job #2207579) | Profil ionanghelina | Cod sursa (job #3150844)
#include <bits/stdc++.h>
using namespace std;
const int nmax = 1e5;
int n,m;
int v[nmax + 5];
int aib[nmax + 5];
int ub(int x)
{
return (x & (-x));
}
void add(int x, int y)
{
for(int i=x;i<=n;i+=ub(i))
{
aib[i] += y;
}
}
int sum(int x)
{
int rez = 0;
for(int i=x;i>=1;i-=ub(i))
{
rez += aib[i];
}
return rez;
}
int main()
{
freopen("aib.in","r",stdin);
freopen("aib.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>v[i];
add(i,v[i]);
}
for(int i=1;i<=m;i++)
{
int tip;
cin>>tip;
if(tip==0)
{
int poz, val;
cin>>poz>>val;
add(poz,val);
}
else if(tip==1)
{
int a, b;
cin>>a>>b;
cout<<sum(b) - sum(a - 1)<<'\n';
}
else
{
int a;
cin>>a;
int s = 0, poz = 0;
for(int b=17;b>=0;b--)
{
if(poz + (1<<b) <= n && s + aib[poz + (1<<b)] < a)
{
s += aib[poz + (1<<b)];
poz += (1<<b);
}
}
if(poz + 1 > n || sum(poz + 1) != a)
{
cout<<-1<<'\n';
}
else
{
cout<<poz + 1<<'\n';
}
}
}
return 0;
}