Pagini recente » Cod sursa (job #582086) | Cod sursa (job #1752071) | Cod sursa (job #1823608) | Cod sursa (job #104676) | Cod sursa (job #733341)
Cod sursa(job #733341)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
#define MAXN 100100
int arb[MAXN], n, m;
int query(int k) {
int sum = 0;
while(k > 0) {
sum += arb[k];
k = k - (k & (-k));
}
return sum;
}
void update(int k, int add) {
while(k <= n) {
arb[k] += add;
k = k + (k & (-k));
}
}
int search(int sum) {
int rez, step;
for (step = 1; step <= n; step *= 2);
for (rez = 0; step; step /= 2) {
if (rez + step <= n)
if (sum >= arb[rez + step]) {
rez += step;
sum -= arb[rez + step];
}
}
return rez;
}
int main() {
int i, a, op, b, add;
fin >> n >> m;
for (i = 1; i <= n; ++i) {
fin >> a;
update(i, a);
}
for (i = 1; i <= m; ++i) {
fin >> op;
switch (op) {
case 0: {
fin >> a >> add;
update(a, add);
break;
}
case 1: {
fin >> a >> b;
fout << query(b) - query(a - 1) << "\n";
break;
}
case 2: {
fin >> a;
fout << search(a) << "\n";
break;
}
}
}
fout.close();
return 0;
}