Pagini recente » Cod sursa (job #1331184) | Cod sursa (job #2858353) | Cod sursa (job #1854952) | Cod sursa (job #1561854) | Cod sursa (job #1208807)
#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,v[DIM];
void update(int p,int x){
for(;p<=n;p+=p&(-p)) v[p]+=x;
}
int querry(int p){
int r=0;
for(;p;p-=p&(-p)) r+=v[p];
return r;
}
int querry2(int x){
int p=1,d=1;
for(;d<=n;d*=2);
for(;d;d/=2)
if(p+d-1<=n && v[p+d-1]<=x){
x-=v[p+d-1];
if(x==0) return p+d-1;
p+=d;
}
return -1;
}
int main(void){
register int i,j,x,p,t,a,b;
f>>n>>m;
for(i=1;i<=n;i++)
f>>x,update(i,x);
for(i=1;i<=m;i++){
f>>t;
switch(t){
case 0:
f>>a>>b;
update(a,b);
break;
case 1:
f>>a>>b;
g<<querry(b)-querry(a-1)<<"\n";
break;
default:
f>>a;
g<<querry2(a)<<"\n";
}
}
return 0;
}