Pagini recente » Cod sursa (job #2382464) | Cod sursa (job #1629200) | Cod sursa (job #2813607) | Cod sursa (job #2619795) | Cod sursa (job #3216037)
#include <bits/stdc++.h>
#define NMAX 100002
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int n, m, tree[NMAX];
void add(int poz, int val)
{
for (int i = poz; i <= n; i += (i & (-i)))
tree[i] += val;
}
int sum(int poz)
{
int rez = 0;
for (int i = poz; i != 0; i -= (i & (-i)))
rez += tree[i];
return rez;
}
int sum_min_poz(int val)
{
int mask = 1, position = 0;
while (mask <= n)
mask = (mask << 1);
mask = (mask >> 1);
while (mask > 0)
{
if (position + mask <= n && tree[position+mask] <= val)
{
val -= tree[position+mask];
position += mask;
if (val == 0) return position;
}
mask = (mask >> 1);
}
return -1;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
add(i, x);
}
for (int i = 1; i <= m; i++)
{
int c, a, b;
fin >> c;
if (c == 0)
{
fin >> a >> b;
add(a, b);
}
if (c == 1)
{
fin >> a >> b;
fout << sum(b) - sum(a-1) << "\n";
}
if (c == 2)
{
fin >> a;
fout << sum_min_poz(a) << "\n";
}
}
return 0;
}