Cod sursa(job #158612)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 13 martie 2008 18:41:16
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <cstdio>
#define vv 100002

using namespace std;

int w,n,m,p,a[4*vv+66],maxim,l,pp,e,z[vv];

void pomisor(int nod, int st, int dr)
{
    if (st==dr)
    {
        a[nod]=w;
        z[++z[0]]=nod;
        return;
    }
    int mij=(st+dr)/2;
    if (p<=mij)
        pomisor(2*nod,st,mij);
    else
        pomisor(2*nod+1,mij+1,dr);
    a[nod]=a[2*nod]+a[2*nod+1];
}

void interogare(int nod, int st, int dr)
{
    if (st==dr)
    {
        if (a[nod]==1)
            ++e;
        else
            e=0;
        if (e>maxim)
            maxim=e;
        return;
    }
    int mij=(st+dr)/2;
    if (p<=mij)
        interogare(2*nod,st,mij);
    if (mij<w)
        interogare(2*nod+1,mij+1,dr);
}

void citire()
{
    freopen("hotel.in","r",stdin);
    scanf("%d%d", &n, &pp);
    for (int i=1; i<=n; i++)
    {
        w=1;
        p=i;
        pomisor(1,1,n);
    }
    int q;
    for (int i=1; i<=pp; i++)
    {
        scanf("%d", &q);
        if (q==1)
        {
            scanf("%d%d", &l, &m);
            for (int i=l; i<l+m; i++)
            {
                w=0;
                p=i;
                pomisor(1,1,n);
            }
        }
        else if (q==2)
        {
            scanf("%d%d", &l, &m);
            for (int i=l; i<l+m; i++)
            {
                w=1;
                p=i;
                pomisor(1,1,n);
            }
        }
        else
        {
            maxim=e=0;
            p=1;
            w=n;
            //interogare(1,1,n);
            for (int i=1; i<=n+1; i++)
                if (a[z[i]]==1)
                {
                    if (e++>maxim)
                        maxim=e;
                }
                else
                    e=0;
            printf("%d\n",maxim);
        }
    }
    fclose(stdin);
}

int main()
{
    freopen("hotel.out","w",stdout);
    citire();
    fclose(stdout);
    return 0;
}