Pagini recente » Cod sursa (job #2824970) | Cod sursa (job #2707168) | Cod sursa (job #2395869) | Cod sursa (job #1712157) | Cod sursa (job #386462)
Cod sursa(job #386462)
#include<fstream>
using namespace std;
const char iname[]="aib.in";
const char oname[]="aib.out";
const int maxn=100005;
ifstream f(iname);
ofstream g(oname);
int i,j,n,m,x,y,z,aib[maxn];
void update(int x,int y)
{
for(;x<=n;x+=x&-x)
aib[x]+=y;
}
int query(int x,int y)
{
int s=0;
for(;y;y-=y&-y)
s+=aib[y];
--x;
for(;x;x-=x&-x)
s-=aib[x];
return s;
}
int search(int s)
{
int step;
for(step=1;step<n;step<<=1);
int i;
for(i=0;step;step>>=1)
if(i+step<=n&&aib[i+step]<=s)
i+=step,s-=aib[i];
if(s)
return -1;
return i>0?i:-1;
}
int main()
{
f>>n>>m;
for(i=1;i<=n;++i)
f>>x,update(i,x);
for(i=1;i<=m;++i)
{
f>>x;
if(x==0)
f>>y>>z,update(y,z);
if(x==1)
f>>y>>z,g<<query(y,z)<<"\n";
if(x==2)
f>>y,g<<search(y)<<"\n";
}
f.close();
g.close();
return 0;
}