Pagini recente » Cod sursa (job #3175558) | Cod sursa (job #2130553) | Cod sursa (job #2463710) | Cod sursa (job #2264458) | Cod sursa (job #2916050)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m;
vector<int> v(100002), w(100002);
void add(int pos, int val)
{
v[pos] += val;
while (pos <= n) {
w[pos] += val;
pos += (pos & -pos);
}
}
int sum(int pos)
{
int sum = 0;
while (pos >= 1) {
sum += w[pos];
pos -= (pos & -pos);
}
return sum;
}
int main()
{
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> v[i];
w[i] = v[i];
}
// populate finwick
for (int i = 1; i <= n; i++) {
int p = i + (i & -i);
if (p <= n) {
w[p] += w[i];
}
}
// answer queries
while (m--) {
int c;
fin >> c;
if (c == 0) {
int a, b;
fin >> a >> b;
add(a, b);
}
if (c == 1) {
int a, b;
fin >> a >> b;
fout << sum(b) - sum(a - 1) << '\n';
}
if (c == 2) {
int a;
fin >> a;
int power = 1;
for (; power <= n; power <<= 1)
;
int index = 1;
for (; power; power >>= 1)
if (index + power <= n and sum(index + power) <= a)
index += power;
fout << (v[index] == a ? index : -1) << '\n';
}
}
}