Cod sursa(job #3303894)

Utilizator Tudor_CCTudor Cocu Tudor_CC Data 18 iulie 2025 20:18:43
Problema Hotel Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <bits/stdc++.h>

using namespace std;

struct el
{
    int s,d,l,m;
};
el v[200055];   /// s=st d=dr l=lazy m=max

void lz(int l,int r,int in)
{
    if(v[in].l!=0)
    {
        if(v[in].l==1)
        {
            v[in].s=(r-l+1);
            v[in].d=(r-l+1);
            v[in].m=(r-l+1);

        }
        else
        {
            v[in].s=0;
            v[in].d=0;
            v[in].m=0;
        }
        if(l!=r)
        {


        v[in*2].l=v[in].l;
        v[in*2+1].l=v[in].l;
        }
        v[in].l=0;
    }
}

void up(int l,int r,int a,int b,int in,int val)
{
    lz(l,r,in);
    if(r<a || b<l)
    {

    }
    else if(a<=l && r<=b)
    {
        v[in].l=val;
        lz(l,r,in);
    }
    else
    {
        int mij=(l+r)/2;
        up(l,mij,a,b,in*2,val);
        up(mij+1,r,a,b,in*2+1,val);
        lz(l,mij,in*2);
        lz(mij+1,r,in*2+1);
        v[in].m=max(v[in*2].m,v[in*2+1].m);
        v[in].m=max(v[in].m,v[in*2].d+v[in*2+1].s);
        v[in].s=v[in*2].s;
        v[in].d=v[in*2+1].d;
        if(v[in*2+1].m==(r-mij))
        {
            v[in].d=max(v[in].d,v[in*2+1].m+v[in*2].d);
        }
        if(v[in*2].m==(mij-l+1))
        {
            v[in].s=max(v[in].s,v[in*2].m+v[in*2+1].s);
        }
        v[in].m=max(v[in].m,v[in].d);
        v[in].m=max(v[in].m,v[in].s);
    }
}

int main()
{
    ifstream cin("hotel.in");
    ofstream cout("hotel.out");
    int n,m,caz,x,y;
    cin>>n>>m;
    up(1,n,1,n,1,1);
    for(int i=1;i<=m;++i)
    {
        cin>>caz;
        if(caz==1)
        {
            cin>>x>>y;
            up(1,n,x,(x+y-1),1,-1);
        }
        else if(caz==2)
        {
            cin>>x>>y;
            up(1,n,x,(x+y-1),1,1);
        }
        else
        {
            cout<<v[1].m<<"\n";
        }
    }
    return 0;
}