Pagini recente » Cod sursa (job #2764703) | Cod sursa (job #3226875)
#include <bits/stdc++.h>
#define up(i) (i & (-i))
const int NMAX = 1e5;
using namespace std;
ifstream fin ("aib.in");
ofstream fout ("aib.out");
int aib[NMAX + 5], n, q, tsk, val;
void add (int x, int val){
for (int i = x; i <= n; i += up(i))
aib[i] += val;
}
int query(int x){
int sum = 0;
for (int i = x; i >= 1; i -= up(i))
sum += aib[i];
return sum;
}
void solve_query(){
fin >> val;
int st, index = 0, rez = 0;
for (st = 1; st < n; st <<= 1);
while (st){
if (index + st < n && rez + aib[index + st] < val){
index += st;
rez += aib[index];
}
st >>= 1;
}
++index;
fout << (query(index) == val ? index : -1) << "\n";
}
signed main() {
fin >> n >> q;
for (int i = 1, a; i <= n; i++)
fin >> a, add(i, a);
for (int i = 1, a, b; i <= q; i++){
fin >> tsk;
if (tsk == 0){
fin >> a >> b;
add(a, b);
}
if (tsk == 1){
fin >> a >> b;
fout << query(b) - query(a - 1) << "\n";
}
if (tsk == 2)
solve_query();
}
return 0;
}