Pagini recente » Cod sursa (job #737510) | Cod sursa (job #2600842) | Cod sursa (job #420253) | Cod sursa (job #226164) | Cod sursa (job #565863)
Cod sursa(job #565863)
#include<fstream>
using namespace std;
int n,s[100005],m,suma;
int ver()
{ int index=0,i;
for(i=31-__builtin_clz(n);i>=0;i--)
if(index+(1<<i)<=n)
if(s[index+(1<<i)]<=suma){
suma-=s[index+(1<<i)]; index+=(1<<i);
if(!suma)
return index;}
return -1;
}
int main()
{ifstream f("aib.in");
int i,x,c,val,y;
f>>n>>m;
for(i=1;i<=n;i++)
{f>>y; x=i;
while(x<=n)
{s[x]+=y;
x+=x&(-x);}
}
ofstream g("aib.out");
for(i=1;i<=m;i++)
{
f>>c;
if(c==0){
f>>x>>val;
while(x<=n)
{s[x]+=val;
x+=x&(-x);}
}
else
if(c==1)
{f>>x>>y;
suma=0;
x--;
while(x>0)
{suma-=s[x];
x-=x&(-x);}
while(y>0)
{suma+=s[y];
y-=y&(-y);}
g<<suma<<'\n';}
else
{f>>suma;
g<<ver()<<'\n';
}
}
f.close();
g.close();
return 0;}