Pagini recente » Cod sursa (job #2981005) | Cod sursa (job #1698682) | Cod sursa (job #2244230) | Istoria paginii runda/a_b/clasament | Cod sursa (job #2920900)
#define pbinfo
#define fl
//#define func
#ifdef pbinfo
#include <unordered_map>
#include <map>
#include <vector>
#include <cmath>
#include <set>
#ifdef fl
#include <fstream>
#else
#include <iostream>
#include <iomanip>
#endif
#ifdef func
#include "header.hpp"
#endif
#else
#include <bits/stdc++.h>
#endif
using namespace std;
#define lld long long int
#define ulld unsigned long long int
#define sh short
#define lwbit(x) (x & (-x))
#define mod 1234567
#ifdef fl
ifstream cin("aib.in");
ofstream cout("aib.out");
#endif
int n, m;
int fen[100001];
void update(int i, int x) {
for (int k = i; k <= n; k += lwbit(k))
fen[k] += x;
}
int sum(int i) {
int s{};
for (int k = i; k > 0; k -= lwbit(k))
s += fen[k];
return s;
}
int bin(int a) {
int s, i;
for (s = 1; s <= n; s <<= 1);
for (i = 0; s; s >>= 1)
if (i + s <= n && fen[i + s] <= a) {
i += s;
a -= fen[i];
if (!a)
return i;
}
return -1;
}
int main() {
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
int x;
cin >> x;
update(i, x);
}
while (m--) {
int c, i, j;
cin >> c;
switch (c) {
case 0:
cin >> i >> j;
update(i, j);
break;
case 1:
cin >> i >> j;
cout << sum(j) - sum(i - 1) << '\n';
break;
case 2:
cin >> i;
cout << bin(i) << '\n';
}
}
return 0;
}