Pagini recente » Cod sursa (job #431562) | Cod sursa (job #517610) | Cod sursa (job #344401) | Cod sursa (job #1113496) | Cod sursa (job #2341420)
#include <stdio.h>
using namespace std;
int aib[100005], n, v[100005];
void update(int a, int b){
int pos;
for(pos = a ; pos <= n ; pos += (pos & (-pos))){
aib[pos] += b;
}
}
int query(int x){
int pos, ans = 0;
for(pos = x ; pos ; pos -= (pos & (-pos))){
ans += aib[pos];
}
return ans;
}
int main() {
FILE *f = fopen("aib.in", "r");
FILE *g = fopen("aib.out","w");
int q, i, cer, a, b;
fscanf(f, "%d %d\n", &n, &q);
for(i = 1 ; i <= n ; ++i){
fscanf(f, "%d ", v + i);
update(i, v[i]);
}
while(q--){
int pos;
fscanf(f, "%d %d", &cer, &a);
if(cer == 0 || cer == 1){
fscanf(f, "%d", &b);
}
if(cer == 0){
update(a, b);
}
else{
if(cer == 1){
fprintf(g, "%d\n", query(b) - query(a - 1));
}
else{
for(pos = 1 ; pos < n ; pos <<= 1);
for(i = 0 ; pos ; pos >>= 1)
if(i + pos <= n && query(i + pos) < a)
i += pos;
if(query(i + 1) == a)fprintf(g, "%d\n", i + 1);
else fprintf(g, "-1\n");
}
}
}
return 0;
}