Pagini recente » Cod sursa (job #819996) | Cod sursa (job #1900373) | Cod sursa (job #2011741) | Cod sursa (job #2073128) | Cod sursa (job #1738144)
#include <fstream>
using namespace std;
ifstream f("hotel.in");
ofstream g("hotel.out");
int n,m,tip,i,cur,a,b;
struct aint
{
int secv,st,dr;
inline void init(int cost)
{
secv=st=dr=cost;
}
}arb[1<<18];
inline void act(int C,int A,int B,int q,int w)
{
arb[C].secv=max(arb[A].dr+arb[B].st,max(arb[A].secv,arb[B].secv));
arb[C].st=(arb[A].st==q?q+arb[B].st:arb[A].st);
arb[C].dr=(arb[B].dr==w?arb[A].dr+w:arb[B].dr);
}
inline void update(int nod,int st,int dr)
{
if(a<=st&&dr<=b)
{
arb[nod].init((dr-st+1)*cur);
return ;
}
int mid=(st+dr)>>1;
int left=nod<<1;
int right=(nod<<1)+1;
if(arb[nod].secv==dr-st+1)
{
arb[left].init(mid-st+1);
arb[right].init(dr-mid);
}
else if(!arb[nod].secv)
{
arb[left].init(0);
arb[right].init(0);
}
if(a<=mid) update(left,st,mid);
if(mid<b) update(right,mid+1,dr);
act(nod,left,right,mid-st+1,dr-mid);
}
int main()
{
f>>n>>m;
arb[1].init(n);
for(i=1;i<=m;++i)
{
f>>tip;
if(tip==3) g<<arb[1].secv<<'\n';
else
{
f>>a>>b;
b+=a-1;
cur=(tip==2);
update(1,1,n);
}
}
return 0;
}