Pagini recente » Cod sursa (job #2107939) | Cod sursa (job #167780) | Cod sursa (job #3200326) | Cod sursa (job #614949) | Cod sursa (job #1950344)
#include <iostream>
#include <fstream>
#define maxN 100001
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n, m, sumC;
int v[maxN];
int mark[maxN];
int getParent(int k) {
return (k&(k-1));
}
int nextNode(int k) {
return k + (k & -k);
}
void update(int pos, int val) {
while(pos <= n) {
v[pos] += val;
pos = nextNode(pos);
}
}
int sum(int k) {
int s = 0;
while(k) {
s+= v[k];
k=getParent(k);
}
return s;
}
void binSearch(int st, int dr) {
if(st>dr) return;
int mij = st + (dr-st)/2;
int s = sum(mij);
if(s == sumC)
fout<<mij<<'\n';
else if(s > sumC) {
binSearch(st, mij - 1);
} else {
binSearch(mij + 1, dr);
}
}
int main()
{
fin>>n>>m;
int x, y, op;
for(int i = 1; i <= n; i++) {
fin>>x;
update(i, x);
}
for(int j = 1; j <= m; j++) {
fin>>op;
if(op == 0) {
fin>>x>>y;
update(x, y);
} else if(op == 1) {
fin>>x>>y;
fout<<sum(y) - sum(x-1)<<'\n';
} else {
fin>>sumC;
binSearch(1, n);
}
}
fin.close();
fout.close();
return 0;
}