Pagini recente » Cod sursa (job #1561613) | Cod sursa (job #1084335) | Cod sursa (job #447422) | Cod sursa (job #1700256) | Cod sursa (job #1745695)
#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;
void init(int cost)
{
secv=st=dr=cost;
}
void act(aint a,aint b,int q,int w)
{
secv=max(a.dr+b.st,max(a.secv,b.secv));
st=(a.st==q?q+b.st:a.st);
dr=(b.dr==w?a.dr+w:b.dr);
}
}arb[1<<18];
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);
arb[nod].act(arb[left],arb[right],mid-st+1,dr-mid);
}
int main()
{
f>>n>>m;
arb[1]={n,n,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;
}