Pagini recente » Cod sursa (job #743363) | Cod sursa (job #2684652) | Cod sursa (job #384072) | Cod sursa (job #683376) | Cod sursa (job #1645744)
#include <fstream>
#define zero(x) ((x ^ (x - 1)) & x)
using namespace std;
int val, n;
int h[100005];
void add(int poz) {
for(; poz <= n; poz += zero(poz))
h[poz] += val;
}
int calc(int poz) {
int ret = 0;
for(; poz; poz -= zero(poz))
ret += h[poz];
return ret;
}
int main()
{
ifstream f("aib.in");
ofstream g("aib.out");
int m, a, b, op; f >> n >> m;
for(int i = 1; i <= n; i ++) f >> val, add(i);
for(; m; m --) {
f >> op;
if(op == 0) f >> a >> val, add(a);
else if(op == 1) f >> a >> b, g << calc(b) - calc(a - 1) << "\n";
else {
f >> val;
int l = 1, d = n + 1, mid;
for(; l < d;) {
mid = (l + d) / 2;
if(calc(mid) > val) d = mid;
else l = mid + 1;
}
if(calc(l - 1) != val) g << "-1\n";
else g << l - 1 << "\n";
}
}
return 0;
}