Cod sursa(job #2335279)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 3 februarie 2019 21:04:37
Problema Hotel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <bits/stdc++.h>
using namespace std;
#define MAXN 100000
int aint[4 * MAXN + 1];
bool loc[MAXN + 1]=  {0};
int n, p, ramase;
ifstream fin("calorifer.in");
ofstream fout("calorifer.out");
void update1(bool value, int p, int left, int right, int st, int dr){
    int m = (left + right) / 2;
    if(left >= st && dr >= right){
        for(int i = left; i <= dr; ++i)
            loc[i] = value;
        aint[p] = value;
        return;
     }
    if(st <= m) update1(value, 2 * p, left, m, st, dr);
    if(m < dr) update1(value, 2 * p + 1, m + 1, right, st, dr);
}
int query(){
    int maxim = 0, ans = 0;
    for(int i = 1; i <= n; ++i){
        if(loc[i] != 0){
            maxim = max(maxim, ans);
            ans = 0;
        }
        else if(loc[i] == 0) ans++;
    }
    return maxim;
}
int main()
{
    fin >> n >> p;
    for(int i = 1; i <= p; ++i){
        int type, st, dr;
        fin >> type;
        if(type == 1){
            fin >> st >> dr;
            dr = st + dr - 1;
            update1(1, 1, 1, n, st, dr);
        }
        else if(type == 2){
            fin >> st >> dr;
            dr = st + dr - 1;
            update1(0, 1, 1, n, st, dr);

        }
        else if(type == 3) fout << query() << '\n';

    }
    return 0;
}