Pagini recente » Cod sursa (job #3328195) | Cod sursa (job #2338378) | Cod sursa (job #1495699) | Cod sursa (job #1777308) | Cod sursa (job #3329204)
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100000
#define MMAX 1000000
#define PMAX 524288
#define LOG 17
#define INF 0x3f3f3f3f
#define BS 127
#define MOD 1000000007
#define ll long long
#define ull unsigned long long
#define pii pair<ll, ll>
#define pll pair<ll, ll>
#define pipii pair<int, pair<int, int>>
#define piv pair<int, vector<int>>
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, op, x, y;
int a[NMAX + 2], aib[NMAX + 2];
void add(int poz, int x) {
while (poz <= n) {
aib[poz] += x;
poz += (poz & (-poz));
}
}
int sum(int poz) {
int ans = 0;
while (poz > 0) {
ans += aib[poz];
poz -= (poz & (-poz));
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n >> m;
for (int i = 1; i <= n; i++) {
fin >> a[i];
aib[i] += a[i];
int p = i + (i & (-i));
if (p <= n) {
aib[p] += aib[i];
}
}
while (m--) {
fin >> op;
if (op == 0) {
fin >> x >> y;
add(x, y);
}
else if (op == 1) {
fin >> x >> y;
fout << sum(y) - sum(x - 1) << '\n';
}
else {
fin >> x;
int poz = 0, s = 0;
for (int bt = 17; bt >= 0; bt--) {
if (poz + (1 << bt) <= n && s + aib[poz + (1 << bt)] < x) {
s += aib[poz + (1 << bt)];
poz += (1 << bt);
}
}
if (poz + 1 > n || sum(poz + 1) != x) {
fout << "-1\n";
}
else {
fout << poz + 1 << '\n';
}
}
}
return 0;
}