Cod sursa(job #2393907)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 1 aprilie 2019 10:39:41
Problema Hotel Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <fstream>
using namespace std;
int v[2*1000000+1],p[100002];
int n,q,st,dr,nr,ii,val,poz,maxim,tip,c;
void init(int nod,int st,int dr)
{
    if(st==dr)
    {
        p[st]=nod;
        return;
    }
    int mij=(st+dr)/2;
    init(2*nod,st,mij);
    init(2*nod+1,mij+1,dr);
}
void add(int nod,int st,int dr)
{
    if(st==dr)
    {
        v[nod]=val;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        add(2*nod,st,mij);
    else
        add(2*nod+1,mij+1,dr);
    v[nod]=max(v[2*nod],v[2*nod+1]);
}
int main()
{
    ifstream in("hotel.in");
    ofstream out("hotel.out");
    in>>n>>q;
    init(1,1,n);
    for(int i=1;i<=q;i++)
    {
        in>>tip;
        if(tip==1)
        {
            in>>ii>>nr;
            for(int j=ii;j<=ii+nr-1;j++)
            {
                poz=j;
                val=1;
                add(1,1,n);
            }
        }
        if(tip==2)
        {
            in>>ii>>nr;
            for(int j=ii;j<=ii+nr-1;j++)
            {
                poz=j;
                val=0;
                add(1,1,n);
            }
        }
        if(tip==3)
        {
            maxim=0;
            c=0;
            for(int j=1;j<=n;j++)
            {
                if(v[p[j]]==0)
                    c++;
                else
                {
                    if(c>maxim)
                        maxim=c;
                    c=0;
                }
            }
            if(c>maxim)
                maxim=c;
            out<<maxim<<"\n";
        }
    }
    return 0;
}