201992026-01-04 19:14:13hunzombiBináris fa magassága (50 pont)cpp17Accepted 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;
}
SubtaskSumTestVerdictTimeMemory
base50/50
1Accepted0/01ms316 KiB
2Accepted0/0107ms1076 KiB
3Accepted2/24ms316 KiB
4Accepted2/23ms316 KiB
5Accepted2/23ms316 KiB
6Accepted2/23ms316 KiB
7Accepted3/33ms316 KiB
8Accepted3/33ms316 KiB
9Accepted3/33ms316 KiB
10Accepted3/33ms508 KiB
11Accepted2/2109ms952 KiB
12Accepted2/2109ms1356 KiB
13Accepted2/2114ms1264 KiB
14Accepted2/2112ms1076 KiB
15Accepted2/2115ms1076 KiB
16Accepted2/2105ms1332 KiB
17Accepted2/2105ms1332 KiB
18Accepted2/2104ms1364 KiB
19Accepted2/2104ms968 KiB
20Accepted3/3108ms948 KiB
21Accepted3/3108ms1076 KiB
22Accepted3/3104ms1076 KiB
23Accepted3/3108ms964 KiB