Cod sursa(job #158604)

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

using namespace std;

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

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]=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);
    ifstream fin("hotel.in");
    ofstream fout("hotel.out");
    fin>>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);
        fin>>q;
        if (q==1)
        {
            //scanf("%d%d", &l, &m);
            fin>>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);
            fin>>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);
            //printf("%d\n",maxim);
            fout<<maxim<<"\n";
        }
    }
    //fclose(stdin);
    fin.close();
    fout.close();
}

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