Cod sursa(job #2339456)

Utilizator dacianouaPapadia Mortala dacianoua Data 8 februarie 2019 22:20:22
Problema Hotel Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <iostream>
#include <fstream>
#define nmax 100005
using namespace std;
ifstream fin("hotel.in");
ofstream fout("hotel.out");
int ait[2*nmax],n,p,max1,max2;
void update(int poz, int val, int nod, int st, int dr)
{
    if(st==dr)
    {
        ait[nod]=val;
        return;
    }
    int mij=(st+dr)>>1;
    if(mij>=poz)
        update(poz,val,nod<<1,st,mij);
    else
        update(poz,val,(nod<<1)+1,mij+1,dr);
    ait[nod]=ait[nod<<1]+ait[(nod<<1)+1];
}
void query(int l,int r, int nod, int st, int dr)
{
    if(st==dr)
    {
        if(!ait[nod])
            ++max1;
        else
            max1=0;
        max2=max(max1,max2);
        return;
    }
    int mij=(st+dr)>>1;
    if(mij>=l)
        query(l,r,nod<<1,st,mij);
    if(mij<r)
        query(l,r,(nod<<1)+1,mij+1,dr);

}
int main()
{
    int x,y,z;
    fin>>n>>p;
    for(int i=1;i<=p;i++)
    {
        fin>>z;
        switch(z)
        {
        case 1:
            fin>>x>>y;
            for(int i=x;i<x+y;i++)
                update(i,1,1,1,n);break;
        case 2:
            fin>>x>>y;
            for(int i=x;i<x+y;i++)
                update(i,0,1,1,n);break;
        case 3:
            max1=max2=0;
            query(1,n,1,1,n);
            fout<<max2<<"\n";
        }
    }
    return 0;
}