Pagini recente » Cod sursa (job #754835) | Cod sursa (job #3236045) | Cod sursa (job #3159878) | Cod sursa (job #1602119) | Cod sursa (job #2977609)
#include <bits/stdc++.h>
#define zeros(x)((x ^ (x - 1) & x)
using namespace std;
ifstream in("aib.in");
ofstream out("aib.out");
const int N = 1e5 + 5;
int gay;
int n;
int aib[N], v[N];
const int L = 16;
void update(int p, int val)
{
while(p <= n)
{
aib[p] += val;
int ultima = (p & (-p));
p += ultima;
}
}
int compute(int p)
{
int sum = 0;
while(p > 0)
{
sum += aib[p];
int ultima = (p & (-p));
p -= ultima;
}
return sum;
}
int query(int val)
{
int rez = 0, pas = 1 << L;
while(pas != 0)
{
if(rez + pas <= n && aib[rez + pas] < val)
{
val -= aib[rez + pas];
rez += pas;
}
pas /= 2;
}
if(rez == n || compute(rez + 1) - compute(rez) != val)
{
return -1;
}
return rez + 1;
}
signed main()
{
in >> n >> gay;
for(int i = 1; i <= n; i++)
in >> v[i];
for(int i = 1; i <= n; i++)
update(i, v[i]);
for(int i = 1; i <= gay; i++)
{
int op;
in >> op;
if(op == 0)
{
int a, b;
in >> a >> b;
update(a, b);
}
else if(op == 1)
{
int a, b;
in >> a >> b;
out << compute(b) - compute(a - 1) << '\n';
}
else
{
int a;
in >> a;
out << query(a) << '\n';
}
}
return 0;
}