Pagini recente » Cod sursa (job #1262672) | Cod sursa (job #1441532) | Cod sursa (job #280659) | Cod sursa (job #2661787) | Cod sursa (job #963661)
Cod sursa(job #963661)
#include <iostream>
#include <fstream>
using namespace std;
#define lsb(X) (X&(X^(X-1)))
#define LE 100666
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,tree[LE],a[LE],i,typ;
void update(int pos,int value) {
for(; pos<=n; pos+=lsb(pos))
tree[pos]+=value;
}
int query(int pos) {
int result=0;
for(; pos>0; pos-=lsb(pos))
result+=tree[pos];
return result;
}
int sch(int smax) {
int step,pos,total=0;
for(step=1; step<=n; step<<=1);
for(pos=0; step; step>>=1)
if (pos+step<=n&&total+tree[pos+step]<=smax) {
pos+=step;
total+=tree[pos];
}
return pos;
}
int main() {
f>>n>>m;
for(i=1; i<=n; ++i) {
f>>a[i];
update(i,a[i]);
}
for(i=1; i<=m; ++i) {
f>>typ;
int aa,bb;
if (typ==0) {
f>>aa>>bb;
update (aa,bb);
}
if (typ==1) {
f>>aa>>bb;
g<<query(bb)-query(aa-1)<<'\n';
}
if (typ==2) {
f>>aa;
g<<sch(aa)<<'\n';
}
}
f.close();
g.close();
return 0;
}