Pagini recente » Cod sursa (job #2720242) | Cod sursa (job #3138521) | Cod sursa (job #172149) | Cod sursa (job #784455) | Cod sursa (job #2669533)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("aib.in");
ofstream cout("aib.out");
#define NMAX 100001
#define Ub(x) (x & (-x))
int v[NMAX], aib[NMAX], n, m, i, c, a, b, x;
void add(int pos, int val) {
for(int i = pos; i <= n; i += Ub(i))
aib[i] += val;
}
long long sum(int pos) {
long long s = 0, i;
for(i = pos; i >= 1; i -= Ub(i))
s += aib[i];
return s;
}
int cautBinar(int x) {
int st = 1, dr = n, poz = -1;
while(st <= dr && poz == -1) {
int mid = (st + dr) / 2;
int s = sum(mid);
if(s == x)
poz = mid;
else if(x < s)
dr = mid - 1;
else st = mid + 1;
}
return poz;
}
int main() {
cin >> n >> m;
for(i = 1; i <= n; i++) {
cin >> v[i];
add(i, v[i]);
}
for(int j = 1; j <= m; j++) {
cin >> c;
if(c == 0) {
cin >> a >> b;
add(a, b);
}else if(c == 1) {
cin >> a >> b;
cout << sum(b) - sum(a - 1) << '\n';
}else {
cin >> x;
cout << cautBinar(x) << '\n';
}
}
return 0;
}