Pagini recente » Cod sursa (job #1575571) | Cod sursa (job #2895789) | Cod sursa (job #1324939) | Cod sursa (job #1854392) | Cod sursa (job #779612)
Cod sursa(job #779612)
#include <fstream>
#define MAXN 100005
using namespace std;
ifstream f("aib.in");
ofstream g("aib.out");
long n,m,x,y,v[MAXN],nr0,tip,S1,S,t,sol;
void adauga(long a,long b);
void suma(long a);
int main()
{
int i,j;
f>>n>>m;
for(i=1;i<=n;i++){
f>>x;
adauga(x,i);}
for(i=1;i<=m;i++){
f>>tip;
if(!tip){
f>>x>>y;
adauga(y,x);
continue;}
if(tip==1){
f>>x>>y;
suma(y);
S1=S;
suma(x-1);
g<<S1-S<<'\n';}
else{
f>>x;
sol=-1;
for(t=1;t<=n;t*=2);
for(j=0;t;t/=2){
if(j+t<=n&&x>=v[j+t]){
j+=t;
x-=v[j];
if(!x){
sol=j;
break;}}}
g<<sol<<'\n';}}
f.close();
g.close();
return 0;
}
void adauga(long a,long b){
for(b;b<=n;b+=nr0){
nr0=(b&(-b));
v[b]+=a;}}
void suma(long a){
S=0;
for(a;a>0;a-=nr0){
nr0=(a&(-a));
S+=v[a];}}