Cod sursa(job #2202411)

Utilizator jumareastefanstefan jumarea jumareastefan Data 8 mai 2018 18:32:06
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>

#define MAX 1e16

using namespace std;

ifstream f("1.in");
ofstream g("1.out");

struct arb{
int st, dr, sol, lazy;
};

arb v[400005];
int n, s, d, x, i;

void initial(int a, int b, int nod)
{
    int mij = (a + b) / 2;
    v[nod].dr = v[nod].st = v[nod].sol = b - a + 1;
    if (a == b) return;
    initial(a, mij, nod*2);
    initial(mij + 1, b, nod*2 + 1);
}

void propag(int a, int b, int nod)
{
    if (v[nod] == 0) return;
    if (v[nod] == 1)
    {
        v[nod].dr = v[nod].st = v[nod].sol = 0;
    }
    else
    {
        v[nod].dr = v[nod].st = v[nod].sol = b - a + 1;
    }
    v[2*nod].lazy = v[2*nod + 1].lazy = v[nod].lazy;
    v[nod].lazy = 0;
}

void act(int a, int b, int ua, int ub, int nod, int val)
{
    int mij = (a + b) / 2;
    if (ua <= a && ub >= b)
    {
        arb[nod].lazy = val;
        propag(a, b, nod);
        return;
    }
    propag(a, b, nod);
    if (ua <= mij) act(a, mij, ua, ub, 2*nod, val);
    else propag(a, mij, 2*nod);
    if (ub > mij) act (mij + 1, b, ua, ub, 2*nod + 1, val);
    else propag(mij + 1, b, 2*nod + 1);
    v[nod].sol = max (v[2*nod].dr + v[2*nod + 1].st, max(v[2*nod].sol, v[2*nod + 1].sol));
    v[nod].st = v[2*nod].st;
}

int main()
{
    return 0;
}