201992026-01-04 19:14:13hunzombiBináris fa magassága (50 pont)cpp17Elfogadva 50/50115ms1364 KiB
#include <bits/stdc++.h>
using namespace std;

/*

important property of binary trees
parent = floor_division(node)
*/

int fastPow(int a, int b) {
    if (b == 0) return 1;
    int ans = fastPow(a, b / 2);
    ans = ans * ans;
    if (b & 1) {
        return a * ans;
    }
    return ans;
}

int main()
{
    int n, m;
    cin >> n;
    cin >> m;

    n = fastPow(2, n);

    vector<int> val(n, 1), dp(n, 0);
    for (int i = n - 1; i > 0; i--) {
        if (dp[i / 2] < dp[i] + val[i]) {
            dp[i / 2] = dp[i] + val[i];
        }
    }

    for (int i=0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        val[u] = v;

        int idx = u / 2;

        while (idx > 0) {
            dp[idx] = max(dp[2 * idx] + val[2 * idx], dp[2 * idx + 1] + val[2 * idx + 1]);
            idx /= 2;
        }
        cout << dp[1] << '\n';
    }

    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/0107ms1076 KiB
3Elfogadva2/24ms316 KiB
4Elfogadva2/23ms316 KiB
5Elfogadva2/23ms316 KiB
6Elfogadva2/23ms316 KiB
7Elfogadva3/33ms316 KiB
8Elfogadva3/33ms316 KiB
9Elfogadva3/33ms316 KiB
10Elfogadva3/33ms508 KiB
11Elfogadva2/2109ms952 KiB
12Elfogadva2/2109ms1356 KiB
13Elfogadva2/2114ms1264 KiB
14Elfogadva2/2112ms1076 KiB
15Elfogadva2/2115ms1076 KiB
16Elfogadva2/2105ms1332 KiB
17Elfogadva2/2105ms1332 KiB
18Elfogadva2/2104ms1364 KiB
19Elfogadva2/2104ms968 KiB
20Elfogadva3/3108ms948 KiB
21Elfogadva3/3108ms1076 KiB
22Elfogadva3/3104ms1076 KiB
23Elfogadva3/3108ms964 KiB