Pagini recente » Cod sursa (job #1232578) | Cod sursa (job #65180) | Cod sursa (job #2581442) | Cod sursa (job #1939140) | Cod sursa (job #2734274)
#include<fstream>
using namespace std;
const int N = 1e5 + 5;
int n, q, aib[N];
ifstream cin("aib.in");
ofstream cout("aib.out");
void update(int poz, int val) {
while (poz <= n) {
aib[poz] += val;
poz += (poz & -poz);
}
}
int query(int poz) {
int sum = 0;
while (poz > 0) {
sum += aib[poz];
poz -= (poz & -poz);
}
return sum;
}
int main() {
cin >> n >> q;
int x, y, o;
for (int i = 1; i <= n; i++) {
cin >> x;
update(i, x);
}
while (q--) {
cin >> o;
if (o < 2) {
cin >> x >> y;
if (o == 0) {
update(x, y);
} else
cout << query(y) - query (x - 1) << "\n";
} else {
int dr = n, st = 1, sum;
cin >> sum;
while (st <= dr) {
int mid = (st + dr) / 2;
if (query(mid) >= sum)
dr = mid - 1;
else
st = mid + 1;
}
if (query(dr + 1) != sum)
cout << "-1\n";
else
cout << dr + 1 << "\n";
}
}
}