Pagini recente » Cod sursa (job #2421579) | Cod sursa (job #1119482) | Cod sursa (job #162582) | Cod sursa (job #1553843) | Cod sursa (job #1685027)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int MAXN = 100005;
int n, q;
int v[MAXN];
int a[MAXN];
void insert(int p, int x) {
for (int i = p; i <= n; i = (i | (i - 1)) + 1) {
a[i] += x;
}
}
int get(int p) {
int s = 0;
for (int i = p; i >= 1; i = (i & (i - 1))) {
s += a[i];
}
return s;
}
int main() {
fin >> n >> q;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
insert(i, v[i]);
}
for (int i = 1; i <= q; ++i) {
int tip;
fin >> tip;
if (tip == 0) {
int poz, m;
fin >> poz >> m;
insert(poz, m);
}
else if (tip == 1) {
int poz1, poz2;
fin >> poz1 >> poz2;
fout << get(poz2) - get(poz1 - 1) << '\n';
}
else {
int s;
fin >> s;
int st = 1;
int dr = n;
int sol = -1;
while (st <= dr) {
int mid = (st + dr) / 2;
int val = get(mid);
if (val < s) {
st = mid + 1;
}
else {
dr = mid - 1;
if (val == s) {
sol = mid;
}
}
}
fout << sol << '\n';
}
}
fout.close();
return 0;
}