Pagini recente » Cod sursa (job #2922671) | Cod sursa (job #837563) | Cod sursa (job #851456) | Cod sursa (job #1753001) | Cod sursa (job #3197949)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <stack>
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
const int LMAX = 100005;
int v[LMAX], aib[LMAX], n;
void update(int poz, int val) {
for (int i = poz; i <= n; i += (i&(-i))) {
aib[i]+=val;
}
}
int query(int poz) {
int ans= 0;
for (int i = poz; i > 0; i -= (i&(-i))) {
ans+=aib[i];
}
return ans;
}
int findk(int sum) {
int st, dr, mij;
st = 0; dr = n;
while (st + 1 != dr) {
mij = (st + dr) >> 1;
if (query(mij) < sum) {
st = mij;
}
else {
dr = mij;
}
}
return dr;
}
int main() {
int m, i;
fin>>n>>m;
for (i = 1; i <= n; i++) {
fin>>v[i];
update(i, v[i]);
}
int op, a, b;
while (m--) {
fin>>op;
if (op == 0) {
fin>>a>>b;
v[a]+=b;
update(a, b);
}
else if (op == 1) {
fin>>a>>b;
fout<<query(b) - query(a-1)<<endl;
}
else {
fin>>a;
fout<<findk(a)<<endl;
}
}
fin.close();
fout.close();
return 0;
}