Pagini recente » Cod sursa (job #1337954) | Cod sursa (job #2125767) | Cod sursa (job #1248445) | Cod sursa (job #1187612) | Cod sursa (job #2331480)
#include <fstream>
using namespace std;
ifstream in ( "aib.in" );
ofstream out ( "aib.out" );
const int N_MAX = 100005;
int N;
int aib[N_MAX];
void update(int i, int val) {
while (i <= N) {
aib[i] += val;
i += i & -i;
}
}
int sum(int i) {
int sol = 0;
while (i) {
sol += aib[i];
i -= i & -i;
}
return sol;
}
int findMinPos(int val) {
int l = 1, r = N;
while (l <= r) {
int m = (l + r) / 2;
int suma = sum(m);
if (suma == val)
return m;
else if (suma < val)
l = m + 1;
else
r = m - 1;
}
return -1;
}
int main() {
int m;
in >> N >> m;
for (int i = 1; i <= N; ++i) {
int x;
in >> x;
update(i, x);
}
while (m--) {
int cod;
in >> cod;
if (cod == 0) {
int a, b;
in >> a >> b;
update(a, b);
} else if (cod == 1) {
int a, b;
in >> a >> b;
out << sum(b) - sum(a - 1) << '\n';
} else {
int a;
in >> a;
out << findMinPos(a) << '\n';
}
}
}