Cod sursa(job #158583)

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

using namespace std;

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

int maxim(int w, int q)
{
    if (w>q)
        return w;
    else
        return q;
}

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

void interogare(int nod, int st, int dr)
{
    //if (p<=st && dr<=w)
    if (st==dr)
    {
        if (a[nod]==1)
            ++e;
        else
            e=0;
        if (e>max)
            max=e;
        //if (max<a[nod])
            //max=a[nod];
        //max+=a[nod];
        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++)
    {
//        scanf("%d", &w);
        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
        {
            max=e=0;
            p=1;
            w=n;
            interogare(1,1,n);
            printf("%d\n",max);
        }
    }
    fclose(stdin);
}

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