Pagini recente » Cod sursa (job #2217243) | Cod sursa (job #2650342) | Cod sursa (job #2417116) | Cod sursa (job #632865) | Cod sursa (job #2805368)
#include <bits/stdc++.h>
#define zeros(x) ((x ^ (x - 1)) & x)
#define oo 0x3f3f3f3f
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int aib[100001], n, m, x, y, z;
void update(int position, int val)
{
int i = position;
for(;i <= n;i += zeros(i))
aib[i] += val;
}
int query(int position)
{
int sum = 0, i = position;
for(;i >= 1;i -= zeros(i))
sum += aib[i];
return sum;
}
int found(int val)
{
int res = 1;
for(;res < n;res <<= 1);
for(int i = 0;res;res >>= 1)
if(i + res <= n && val >= aib[i + res])
{
i += res;
val -= aib[i];
if(!val)
return i;
}
return -1;
}
void read()
{
f>>n>>m;
for(int i = 1;i <= n;++i)
f>>x, update(i, x);
}
void solve()
{
for(int i = 1;i <= m;++i)
{
f>>x;
if(!x)
f>>y>>z, update(y, z);
else if(x == 1)
f>>y>>z, g<<query(z) - query(y - 1)<<'\n';
else
f>>y, g<<found(y)<<'\n';
}
}
int main()
{
read();
solve();
return 0;
}