Pagini recente » Cod sursa (job #2398786) | Cod sursa (job #2707824) | Cod sursa (job #1836396) | Cod sursa (job #2287119) | Cod sursa (job #2352821)
#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 In ("aib.in");
std::ofstream Out("aib.out");
void Citire() {
In >> N >> M;
for (int i=1, X; i<=N; ++i)
In >> X, Update(i, X);
}
void Rezolvare() {
int type, A, B;
while (M--) {
In >> type >> A;
if (type == 0)
In >> B, Update(A, B);
else if (type == 1)
In >> B, Out << Query(B) - Query(A-1) << '\n';
else
Out << BinSearch(A) << '\n';
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}