Pagini recente » Cod sursa (job #1534400) | Cod sursa (job #1026064) | Cod sursa (job #1096064) | Cod sursa (job #1374792) | Cod sursa (job #1342425)
#include <fstream>
#define DIM 100011
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
int n,m,qw;
int A[DIM];
void update(int p,int x){
for(;p<=n;p+=p&(-p)) A[p]+=x;
}
int query1(int p){
int r=0;
for(;p>0;p-=p&(-p)) r+=A[p];
return r;
}
int query2(int a){
int p=1,d=qw,r=0;
for(;d>0;d/=2){
if(p+d-1<=n && A[p+d-1]<=a){
a-=A[p+d-1];
if(!a) return p+d-1;
p+=d;
}
}
return -1;
}
int main(void){
register int i,j,t,a,b;
f>>n>>m;
for(qw=1;qw<=n;qw*=2);
for(i=1;i<=n;i++) f>>a,update(i,a);
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<<query1(b)-query1(a-1)<<"\n";
break;
default:
f>>a;
g<<query2(a)<<"\n";
}
}
f.close();
g.close();
return 0;
}