Pagini recente » Cod sursa (job #2356435) | Cod sursa (job #1854496) | Cod sursa (job #2752252) | Cod sursa (job #1115282) | Cod sursa (job #647678)
Cod sursa(job #647678)
#include<fstream>
#define NMAX 100100
using namespace std;
int n,aib[NMAX];
int search(int val) {
int step,i;
for(step=1;step<n;step<<=1);
for(i=0;step;step>>=1)
if(i+step<=n)
if(val>=aib[i+step]) {
i+=step;
val-=aib[i];
if(!val)
return i;
}
return -1;
}
int query(int nod) {
int sol=0;
while(nod>0) {
sol+=aib[nod];
nod-=(nod&-nod);
}
return sol;
}
void update(int nod,int val) {
while(nod<=n) {
aib[nod]+=val;
nod+=(nod&-nod);
}
}
int main() {
int i,tip,x,y,m;
ifstream in("aib.in");
ofstream out("aib.out");
in>>n>>m;
for(i=1;i<=n;i++) {
in>>x;
update(i,x);
}
while(m--) {
in>>tip>>x;
if(tip!=2)
in>>y;
switch(tip) {
case 0:update(x,y);break;
case 1:out<<query(y)-query(x-1)<<'\n';break;
case 2:out<<search(x)<<'\n';break;
}
}
in.close();
out.close();
return 0;
}