86282024-01-23 23:04:09kukkermanBináris fa magassága (50 pont)cpp17Elfogadva 50/5019ms4952 KiB
#include <iostream>
#include <vector>

using Muveletek = std::vector<std::pair<int, int>>;

void beolvas(std::istream &be, int &n, Muveletek &muveletek) {
    int m;
    be >> n >> m;

    muveletek.resize(m);
    for (auto &[p, h] : muveletek) {
        be >> p >> h;
    }
}

void feldolgoz(int n, const Muveletek &muveletek) {
    const auto pontok_szama = (1 << n) - 1;

    std::vector<int> magassag(pontok_szama);
    std::vector<int> szulo_el(pontok_szama, 1);

    magassag[0] = n - 1;
    for (int i = 1; i < pontok_szama; i++) {
        const auto szulo = (i - 1) >> 1;
        magassag[i] = magassag[szulo] - 1;
    }

    for (auto [p, uj_hossz] : muveletek) {
        int akt = p - 1;
        szulo_el[akt] = uj_hossz;
        while (akt > 0) {
            const auto szulo = (akt - 1) >> 1;
            const auto testver = (akt & 1) > 0 ? akt + 1 : akt - 1;
            const auto uj_szulo_mag = std::max(magassag[akt]     + szulo_el[akt],
                                               magassag[testver] + szulo_el[testver]);

            if (magassag[szulo] != uj_szulo_mag) {
                magassag[szulo] = uj_szulo_mag;
                akt = szulo;

            } else {
                akt = 0;
            }
        }

        std::cout << magassag[0] << '\n';
    }
}

int main() {
    std::ios_base::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);

    int n;
    Muveletek muveletek;
    beolvas(std::cin, n, muveletek);

    feldolgoz(n, muveletek);

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/03ms1700 KiB
2Elfogadva0/018ms3752 KiB
3Elfogadva2/23ms1980 KiB
4Elfogadva2/23ms2100 KiB
5Elfogadva2/23ms2192 KiB
6Elfogadva2/23ms2188 KiB
7Elfogadva3/33ms2188 KiB
8Elfogadva3/33ms2324 KiB
9Elfogadva3/33ms2380 KiB
10Elfogadva3/33ms2516 KiB
11Elfogadva2/218ms4384 KiB
12Elfogadva2/219ms4588 KiB
13Elfogadva2/219ms4784 KiB
14Elfogadva2/219ms4916 KiB
15Elfogadva2/219ms4800 KiB
16Elfogadva2/217ms4808 KiB
17Elfogadva2/217ms4808 KiB
18Elfogadva2/218ms4948 KiB
19Elfogadva2/217ms4808 KiB
20Elfogadva3/318ms4816 KiB
21Elfogadva3/318ms4820 KiB
22Elfogadva3/318ms4824 KiB
23Elfogadva3/318ms4952 KiB