Pagini recente » Cod sursa (job #867031) | Cod sursa (job #2595228) | Cod sursa (job #535749) | Cod sursa (job #704877) | Cod sursa (job #1461133)
#include <iostream>
#include <fstream>
using namespace std;
int n, m, mlg, aib[100001];
inline void mlp (){
mlg = 1;
for (; 1 << mlg <= n ; mlg <<= 1);
}
inline int query (int x){
int ret;
for (ret = 0; x; x -= x & -x)
ret += aib[x];
return ret;
}
inline void update(int i, int val){
for (; i <= n; i += i & -i)
aib[i] += val;
}
inline int pos (int val){
int step = mlg, i;
for (i = n; step; step >>= 1)
if (query(i - step) >= val)
i -= step;
return i;
}
int main(){
ifstream cin ("aib.in");
ofstream cout ("aib.out");
cin >> n >> m;
for (int i = 1 ; i <= n; i++){
int x;
cin >> x, update(i, x);
}
mlp();
for (int i = 1; i <= m; i++){
int t, x, y;
cin >> t >> x;
if (t == 0){
cin >> y;
update(x , y);
}
if (t == 1){
cin >> y;
cout << query(y) - query(x - 1) << "\n";
}
if (t == 2)
cout << pos(x) << "\n";
}
return 0;
}