Pagini recente » Cod sursa (job #2137557) | Cod sursa (job #723337) | Cod sursa (job #3241006) | Cod sursa (job #773731) | Cod sursa (job #2923972)
#include <bits/stdc++.h>
#define INFILE "aib.in"
#define OUTFILE "aib.out"
#define DIM 100005
#define zeroes(i) (i & -i)
using namespace std;
ifstream f(INFILE);
ofstream g(OUTFILE);
int n, m, aib[DIM];
void update(int val, int poz) {
for (int i = poz; i <= n; i += zeroes(i))
aib[i] += val;
}
int query(int poz) {
int sum = 0;
for (int i = poz; i >= 1; i -= zeroes(i))
sum += aib[i];
return sum;
}
int cb(int val) {
int st = 1, dr = n, poz = -1;
while (st <= dr) {
int mid = (st + dr) / 2;
int acutalValue = query(mid);
if (query(mid) > val) {
dr = mid - 1;
} else if (query(mid) == val) {
dr = mid - 1;
poz = mid;
} else {
st = mid + 1;
}
}
return poz;
}
int main() {
f >> n >> m;
for (int i = 1; i <= n; i++) {
int val;
f >> val;
update(val, i);
}
for (int i = 1; i <= m; i++) {
int ops;
f >> ops;
if (ops == 0) {
int a, b;
f >> a >> b;
update(b, a);
} else if (ops == 1) {
int a, b;
f >> a >> b;
g << query(b) - query(a - 1) << "\n";
} else {
int val;
f >> val;
g << cb(val) << "\n";
}
}
return 0;
}