Pagini recente » Cod sursa (job #2410754) | Cod sursa (job #2522374) | Cod sursa (job #2599835) | Cod sursa (job #2656376) | Cod sursa (job #2353632)
#include <bits/stdc++.h>
#define MAXN 100005
int N, M;
int AIB[MAXN];
#define Zeros(X) (X&(-X))
void Update(int X, int value) {
for (X; X <= N; X += Zeros(X)) {
AIB[X] += value;
}
}
int Query(int X) {
int Sum = 0;
for (X; X >= 1; X -= Zeros(X)) {
Sum += AIB[X;
}
return Sum;
}
int BinSearch(int Sum) {
int lbound = 1, rbound = N, mid, v;
while (lbound <= rbound) {
mid = (lbound + rbound)/2;
if ((v = Query(mid)) == Sum) return mid;
if (v < Sum)
lbound = mid+1;
else
rbound = mid-1;
} return -1;
}
std::ifstream fin("aib.in");
std::ofstream fout("aib.out");
void citire() {
fin >> N >> M;
for (int i = 1, X; i <= N; i++) {
fin >> X, Update(i, X);
}
}
void rezolvare() {
int type, A, B;
while(M--) {
fin >> type >> A;
if (type == 0) {
fin >> B, Update(A, B);
}
else if (type == 1) {
fin >> B, fout << Query(B) - Query(A - 1) << '\n';
}
else {
fout << BinSearch(A) << '\n';
}
}
}
int main() {
citire();
rezolvare();
return 0;
}