Pagini recente » Cod sursa (job #1003983) | Cod sursa (job #2061512) | Cod sursa (job #2178068) | Cod sursa (job #1796415) | Cod sursa (job #3192717)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100'005
int tree[NMAX];
int n, m;
ifstream in("aib.in");
ofstream out("aib.out");
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 minPoz(int val) {
int mask = 1;
while (mask <= n) mask <<= 1;
mask >>= 1;
int position = 0;
for (; mask > 0; mask >>= 1)
if (position + mask <= n and tree[position + mask] <= val) {
val -= tree[position + mask];
position += mask;
if (val == 0)
return position;
}
return position;
}
int main() {
in >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
in >> x;
for (int j = i; j <= n; j += (j & (-j)))
tree[j] += x;
}
int qtype;
int a,b;
while(m--) {
in >> qtype;
if (qtype == 0) {
in >> a >> b;
add(a, b);
}
if (qtype == 1) {
in >> a >> b;
out << sum(b) - sum(a-1) << '\n';
}
if (qtype == 2) {
in >> a;
out << minPoz(a) << '\n';
}
}
}