Pagini recente » Cod sursa (job #2309737) | Cod sursa (job #1093086) | Cod sursa (job #133431) | Cod sursa (job #883732) | Cod sursa (job #1996827)
#include <iostream>
#include <fstream>
#define NMAX 100005
using namespace std;
int n;
int sum[NMAX];
inline void update(int pos, int val){
for (int i = pos; i <= n; i += i & -i)
sum[i] += val;
return;
}
inline int query(int pos){
int s = 0;
for (int i = pos; i; i -= i & -i)
s += sum[i];
return s;
}
inline int bin(int val){
int left = 1, right = n;
while (left <= right){
int middle = (left + right) / 2;
int value = query(middle);
if (value == val)
return middle;
if (value < val)
left = middle + 1;
else
right = middle - 1;
}
return -1;
}
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
int m, type, x, y;
f >> n >> m;
for (int i = 1; i <= n; i++){
f >> x;
update(i, x);
}
for (; m; m--){
f >> type;
if (type == 0){
f >> x >> y;
update(x, y);
}
if (type == 1){
f >> x >> y;
g << query(y) - query(x - 1) << '\n';
}
if (type == 2){
f >> x;
g << bin(x) << '\n';
}
}
f.close();
g.close();
return 0;
}