Cod sursa(job #973325)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 14 iulie 2013 10:12:01
Problema Hotel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include <cstdio>
#include <algorithm>
using namespace std;

const int DMAX = 1000003;
int st, dr, L[DMAX << 1], R[DMAX << 1];
bool h;
struct Aint {

    int m, l, r;

}aint[DMAX << 1];

void AINT_build (const int l, const int r, const int nod) {

    L[nod] = l;
    R[nod] = r;
    if (l == r) {
        aint[nod].m = aint[nod].l = aint[nod].r = 1;
        return;
    }
    const int m = (l + r) >> 1;
    aint[nod].m = aint[nod].l = aint[nod].r = r - l + 1;
    AINT_build (l, m, nod * 2);
    AINT_build (m + 1, r, nod * 2 + 1);

}

void AINT_update (const int nod) {

    if (dr < L[nod] || st > R[nod])
        return;
    if (st <= L[nod] && R[nod] <= dr) {
        aint[nod].m = aint[nod].l = aint[nod].r = h ? R[nod] - L[nod] + 1 : 0;
        return;
    }

    AINT_update (nod * 2);
    AINT_update (nod * 2 + 1);
    int m = (R[nod] + L[nod]) >> 1;
    aint[nod].l = aint[nod * 2].l != m - L[nod] + 1 ? aint[nod * 2].l : aint[nod * 2].l + aint[nod * 2 + 1].l;
    aint[nod].r = aint[nod * 2 + 1].r != R[nod] - m ? aint[nod * 2 + 1]. r : aint[nod * 2 + 1].r + aint[nod * 2].r;
    aint[nod].m = max(max(max(aint[nod].l, aint[nod].r), max(aint[nod * 2].m, aint[nod * 2 + 1].m)), aint[nod * 2].r + aint[nod * 2 + 1].l);

}

int main () {

    freopen ("hotel.in", "r", stdin);
    freopen ("hotel.out", "w", stdout);
    int N, P, t, a, b;
    scanf ("%d%d", &N, &P);
    AINT_build (1, N, 1);
    while (P--) {
        scanf ("%d", &t);
        if (t == 1) {
            scanf ("%d%d", &a, &b);
            st = a;
            dr = a + b - 1;
            h = 0;
            AINT_update (1);
            continue;
        }
        if (t == 2) {
            scanf ("%d%d", &a, &b);
            st = a;
            dr = a + b - 1;
            h = 1;
            AINT_update (1);
            continue;
        }
        printf ("%d\n", aint[1].m);
    }

}