Pagini recente » Cod sursa (job #3364263) | Cod sursa (job #3364259) | Cod sursa (job #3364258) | Cod sursa (job #3364256) | Cod sursa (job #3364265)
#include <iostream>
using namespace std;
#include <fstream>
fstream cin("aib.in");
ofstream cout("aib.out");
struct AIB {
int v[100005];
int N;
void update(int poz, int val) {
for(int i = poz; i <= N; i += (i & -i))
v[i] += val;
}
int query(int poz) {
int sum = 0;
for(int i = poz; i > 0; i -= (i & -i))
sum += v[i];
return sum;
}
}aib;
int main() {
int N;cin >> N; int M; cin >> M;
aib.N = N;
for(int i = 1; i <= N; i++) {
int val; cin >> val;
aib.update(i, val);
}
for(int i = 0; i < M; i++) {
int status; cin >> status;
if(status == 0) {
int poz, val; cin >> poz >> val;
aib.update(poz, val);
} else if(status == 1) {
int l, r; cin >> l >> r;
cout << aib.query(r) - aib.query(l - 1) << "\n";
} else {
int target; cin >> target;
int low = 1, high = N, ans = -1;
while(low <= high) {
int mid = (low + high) / 2;
int val = aib.query(mid);
if(val >= target) {
if (val == target)
ans = mid;
high = mid - 1;
} else {
low = mid + 1;
}
}
if (ans == -1)
cout << "Not found\n";
else
cout << ans << "\n";
}
}
}