Pagini recente » Cod sursa (job #1370926) | Cod sursa (job #3169559) | Cod sursa (job #1324460) | Cod sursa (job #842118) | Cod sursa (job #1207011)
#include <fstream>
using namespace std;
#define dim 100001
int AIB[dim],n,m;
void update(int Val,int idx){
while(idx<=n){
AIB[idx]+=Val;
idx+=(idx & -idx);
}
}
int query(int idx){
int sum=0;
while(idx>0){
sum+=AIB[idx];
idx-=(idx & -idx);
}
return sum;
}
int find(int cumfre){
int step=1,i=0;
for(step;step<n;step<<=1);
for(;step;step>>=1)
if(i+step<=n && AIB[i+step]<=cumfre){
cumfre-=AIB[i+step];
i+=step;
if(!cumfre) return i;
}
return -1;
}
int main(){
ifstream f("aib.in");
ofstream g("aib.out");
int x,y,t;
f >> n >> m;
for(int i=1;i<=n;i++){
f >> x;
update(x,i);
}
while(m--){
f >> t;
if(t==0){
f >> x >> y;
update(y,x);
}
else if(t==1){
f >> x >> y;
g << query(y)-query(x-1) << "\n";
}
else{
f >> x;
g << find(x) <<"\n";
}
}
}