Pagini recente » Cod sursa (job #759610) | Cod sursa (job #905375) | Cod sursa (job #258644) | Cod sursa (job #2169215) | Cod sursa (job #2393686)
#include <bits/stdc++.h>
#define zeros(x) (x & (-x))
using namespace std;
const int MAXN = 1e5 + 15;
int aib[MAXN];
void update(int poz, int n, int val){
for(int i = poz; i <= n; i += zeros(i))
aib[i] += val;
}
int query(int y){
int s1 = 0;
for(int i = y; i >= 1; i -= zeros(i))
s1 += aib[i];
return s1;
}
int findd(int s, int n){
int current = 0;
for(int power = 29; power >= 0; --power){
if((1 << power) + current < n and query((1 << power) + current) < s)
current += (1 << power);
}
current ++;
if(query(current) == s) return current;
return -1;
}
ifstream fin("aib.in");
ofstream fout("aib.out");
int main(){
int n, m, val;
fin >> n >> m;
for(int i = 1; i <= n; ++i){
fin >> val;
update(i, n, val);
}
for(int i = 1; i <= m; ++i){
int type , a, b;
fin >> type >> a;
if(type == 0){
fin >> b;
update(a, n, b);
}
else if(type == 1){
fin >> b;
fout << query(b) - query(a - 1) << '\n';
}
else {
fout << findd(a, n) << '\n';
}
}
return 0;
}