Pagini recente » Cod sursa (job #827614) | Cod sursa (job #931531) | Cod sursa (job #1566069) | Istoria paginii runda/teza11b/clasament | Cod sursa (job #1231344)
#include<fstream>
using namespace std;
int n, m, i, ii, j, a[100007], p, u, x, op, s, k, mij;
ifstream in("aib.in");
ofstream out("aib.out");
int query(int p) {
int s = 0;
for(i=p; i>0; i-=(i&-i))
s+=a[i];
return s;
}
void update(int p, int x) {
for(int i=p; i<=n; i+=(i&-i))
a[i] += x;
}
int main(){
in>>n>>m;
for(i=1; i<=n; i++){
in>>x;
update(i, x);
}
for(;m--;){
in>>op;
if(op==0){
in>>p>>x;
update(p, x);
}
if(op==1){
in>>p>>u;
out<<query(u) - query(p-1)<<"\n";
}
if(op==2){
ii=99999999;
in>>k;
p=1; u=n;
s=0;
while(p<=u){
s=0;
mij=p+(u-p)/2;
s = query(mij);
if(s>=k)
u=mij-1;
else
p=mij+1;
}
if (query(p) == k)
out<<p<<"\n";
else
out<<"-1"<<"\n";
}
}
}