Pagini recente » Cod sursa (job #245496) | Cod sursa (job #172422) | Cod sursa (job #2597571) | Cod sursa (job #658035) | Cod sursa (job #2629490)
#include <bits/stdc++.h>
using namespace std;
#define NMAX 100005
int spart[NMAX], tree[NMAX], n, m;
void update(int pos, int val) {
for(int i = pos; i <= n; i++) {
spart[i] += val;
}
}
int getSum(int a, int b) {
return spart[b] - spart[a - 1];
}
int search(int sum) {
int left = 1, right = n, mink = NMAX;
while(left <= right) {
int middle = (left + right) / 2;
if(spart[middle] == sum) {
mink = min(middle, mink);
}
if(spart[middle] > sum) {
right = middle - 1;
} else {
left = middle + 1;
}
}
return mink;
}
int main() {
freopen("aib.in", "r", stdin);
freopen("aib.in", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++) {
scanf("%d", &tree[i]);
spart[i] = spart[i - 1] + tree[i];
}
for(int i = 1; i <= m; i++) {
int op, a, b;
scanf("%d%d", &op, &a);
if(op == 0) {
scanf("%d", &b);
update(a, b);
} else if(op == 1) {
scanf("%d", &b);
printf("%d\n", getSum(a, b));
} else {
printf("%d\n", search(a));
}
}
return 0;
}