Pagini recente » Cod sursa (job #1333792) | Cod sursa (job #2071723) | Cod sursa (job #320152) | Cod sursa (job #2466612) | Cod sursa (job #432002)
Cod sursa(job #432002)
#include<fstream>
#define maxn 100001
using namespace std;
ifstream fin("aib.in");
ofstream fout("aib.out");
int n,m,poz;
int c[maxn];
void modifica(int ind,int val)
{ poz=0;
while(ind<=n)
{ c[ind]+=val;
while(!(ind & (1<<poz)))
poz++;
ind+=(1<<poz);
poz++;
}
}
int suma(int ind)
{ int s=0;
poz=0;
while(ind>0)
{ s+=c[ind];
while(!(ind &(1<<poz)))
poz++;
ind-=(1<<poz);
poz+=1;
}
return s;
}
int cauta(int sum)
{ int i,pas;
for(pas=1;pas<n;pas<<=1);
for(i=0;pas;pas>>=1)
{ if(i+pas<=n)
{ if(sum>=c[i+pas])
{ i+=pas;
sum-=c[i];
if(sum==0) return i;
}
}
}
return -1;
}
int main()
{ int i,x,y,k;
fin>>n>>m;
for(i=1;i<=n;i++)
{ fin>>x;
modifica(i,x);
}
for(i=1;i<=m;i++)
{ fin>>k;
if(k!=2)
{ fin>>x>>y;
if(k==1) fout<<suma(y)-suma(x-1)<<"\n";
else modifica(x,y);
}
else
{ fin>>x;
fout<<cauta(x)<<"\n";
}
}
fin.close();
fout.close();
return 0;
}