Pagini recente » Cod sursa (job #1670125) | Cod sursa (job #420352) | Cod sursa (job #536187) | Cod sursa (job #2773518) | Cod sursa (job #2923875)
//#include <iostream>
#include <fstream>
#include<vector>
using namespace std;
ifstream cin("datorii.in");
ofstream cout("datorii.out");
int N;
vector<int> BIT;
void update(int i, int val) {
while (i <= N) {
BIT[i] += val;
i += (i & -i);
}
}
int prefixSum(int i) {
int sum = 0;
while (i > 0) {
sum += BIT[i];
i -= (i & -i);
}
return sum;
}
int rangeSum(int i, int j) {
return prefixSum(j) - prefixSum(i - 1);
}
int main()
{
int i, j, nr, M, type, a, b;
cin >> N >> M;
BIT.resize(N + 1);
for (i = 1; i <= N; i++) {
cin >> nr;
update(i, nr);
}
for (i = 1; i <= M; i++) {
cin >> type >> a>>b;
if (type == 0) {
update(a, -b);
continue;
}
if (type == 1) {
cout << rangeSum(a, b) << "\n";
continue;
}
//type == 2
bool found = false;
for (j = 1; j <= N; j++) {
int sum = prefixSum(j);
if (sum == a) {
found = true;
break;
}
else if (sum > a)
break;
}
if (found)
cout << j << "\n";
else
cout << -1 << "\n";
}
return 0;
}