Cod sursa(job #3363012)

Utilizator CorvinJudge0Corvin Judge CorvinJudge0 Data 13 august 2026 13:01:26
Problema Hotel Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>

#define MAXN 131072

struct nod {
    int secv, pref, suf;
} arb[2 * MAXN];

void build(int n) {
    int p2, i;

    p2 = n / 2;
    while (p2) {
        for (i = p2; i < 2 * p2; i++) {
            arb[i].pref = arb[2 * i].pref;
            arb[i].suf = arb[2 * i + 1].suf;
            arb[i].secv = arb[2 * i].suf + arb[2 * i + 1].pref;

            if (arb[i].secv == n / p2) {
                arb[i].pref = arb[i].suf = arb[i].secv;
            }

        }
        p2 /= 2;
    }
}

int main() {
    FILE *fin, *fout;
    int n, p, p2, op, pr, l, i, j;

    fin = fopen("hotel.in", "r");
    fout = fopen("hotel.out", "w");
    fscanf(fin, "%d%d", &n, &p);

    p2 = 1;
    while (p2 < n) {
        p2 *= 2;
    }
    for (i = p2; i < p2 + n; i++) {
        arb[i].secv = arb[i].pref = arb[i].suf = 1;
    }
    n = p2;
    build(n);

    for (i = 1; i <= p; i++) {
        fscanf(fin, "%d", &op);
        switch (op) {
            case 3:
                fprintf(fout, "%d\n", arb[1].secv);
                break;
            default:
                fscanf(fin, "%d%d", &pr, &l);
                for (j = n + pr - 1; j < n + pr + l - 1; j++) {
                    arb[j].secv = arb[j].pref = arb[j].suf = op - 1;
                }
                build(n);
        }
    }
    fclose(fin);
    fclose(fout);

    return 0;
}