Cod sursa(job #1800831)

Utilizator giotoPopescu Ioan gioto Data 8 noiembrie 2016 10:17:47
Problema Hotel Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
using namespace std;

int k, tip, val, n, m, x, y, Sol, Arb[400088];
inline void Update(int st, int dr, int nod){
    if(st == dr && x <= st && st <= y){Arb[nod] += val; return ;}
    int mij = (st + dr) / 2;
    if(mij >= x) Update(st, mij, nod * 2);
    if(mij < y) Update(mij + 1, dr, nod * 2 + 1);
    Arb[nod] = Arb[nod * 2] + Arb[nod * 2 + 1];
}
inline void Query(int st, int dr, int nod){
    if(st == dr){
        if(Arb[nod] == 0) ++k;
        else k = 0;
        if(k > Sol) Sol = k;
        return ;
    }
    int mij = (st + dr) / 2;
    if(mij >= 1) Query(st, mij, nod * 2);
    if(mij < n) Query(mij + 1, dr, nod * 2 + 1);
}
int main()
{
    freopen("hotel.in", "r", stdin);
    freopen("hotel.out", "w", stdout);
    scanf("%d%d", &n, &m);
    for(int i = 1; i <= m ; ++i){
        scanf("%d", &tip);
        if(tip == 1){
            scanf("%d%d", &x, &y);
            y += x - 1; val = 1;
            Update(1, n, 1);
        }else if(tip == 2){
            scanf("%d%d", &x, &y);
            y += x - 1; val = -1;
            Update(1, n, 1);
        }else{
            Sol = 0; k = 0;
            Query(1, n, 1);
            printf("%d\n", Sol);
        }
    }
    return 0;
}