Pagini recente » Cod sursa (job #1197184) | Cod sursa (job #2910735) | Cod sursa (job #786851) | Cod sursa (job #3004190) | Cod sursa (job #2579169)
#include <fstream>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int aib[100005], n, m, t, a, b;
void update(int pos, int val) {
while(pos <= n) {
aib[pos] += val;
pos += (pos&-pos);
}
}
void citire() {
fin >> n >> m;
int x;
for(int i = 1; i <= n; i++) {
fin >> x;
update(i, x);
}
}
int query(int pos) {
int s = 0;
while(pos > 0) {
s += aib[pos];
pos -= (pos&-pos);
}
return s;
}
int cb(int val) {
int st = 1, dr = n;
while(st <= dr) {
int m = (st+dr)/2;
int q = query(m);
if(q == val && query(m-1) < val)
return m;
else if(q >= val)
dr = m-1;
else
st = m+1;
}
return -1;
}
int main() {
citire();
while(m--) {
fin >> t;
if(t == 0) {
fin >> a >> b;
update(a, b);
} else if(t == 1) {
fin >> a >> b;
fout << query(b)-query(a-1) << '\n';
} else {
fin >> a;
fout << cb(a) << '\n';
}
}
}