8348 2024. 01. 14 21:53:18 renn Bináris fa magassága (50 pont) cpp17 Elfogadva 50/50 20ms 5176 KiB
#include <bits/stdc++.h>

using namespace std;

int sumlevelek[16] = {1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767, 65535};
int levelek_n[16] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768};
int a, b, n, k;

int main() {

    cin.tie(0);
    ios::sync_with_stdio(0);

    cin >> n >> k;

    vector<int> hossz(sumlevelek[n-1], 1);
    vector<int> sumhossz(sumlevelek[n-1], n-1);
    for(int i = 1; i < n; i++)
    {
        for(int j = sumlevelek[i-1]; j < sumlevelek[i]; j++)
        {
            sumhossz[j] = n-i-1;
        }
    }
    
    while(k--)
    {
        cin >> a >> b;
        
        hossz[a-1] = b;
        while(a/2 > 0)
        {
            sumhossz[(a/2)-1] = max(sumhossz[a-1]+hossz[a-1], sumhossz[(a^1)-1]+hossz[(a^1)-1]);
            a/=2;
        }
        sumhossz[0] = max(sumhossz[1]+hossz[1], sumhossz[2]+hossz[2]);
        cout << sumhossz[0] << "\n";
    }

    return 0;
}
Részfeladat Összpont Teszt Verdikt Idő Memória
base 50/50
1 Elfogadva 0/0 3ms 1828 KiB
2 Elfogadva 0/0 18ms 3060 KiB
3 Elfogadva 2/2 3ms 2200 KiB
4 Elfogadva 2/2 3ms 2416 KiB
5 Elfogadva 2/2 3ms 2636 KiB
6 Elfogadva 2/2 3ms 2840 KiB
7 Elfogadva 3/3 3ms 3056 KiB
8 Elfogadva 3/3 3ms 3140 KiB
9 Elfogadva 3/3 3ms 3140 KiB
10 Elfogadva 3/3 3ms 3360 KiB
11 Elfogadva 2/2 19ms 4416 KiB
12 Elfogadva 2/2 19ms 4436 KiB
13 Elfogadva 2/2 20ms 4508 KiB
14 Elfogadva 2/2 20ms 4712 KiB
15 Elfogadva 2/2 20ms 4744 KiB
16 Elfogadva 2/2 18ms 4640 KiB
17 Elfogadva 2/2 18ms 4708 KiB
18 Elfogadva 2/2 18ms 4636 KiB
19 Elfogadva 2/2 18ms 4840 KiB
20 Elfogadva 3/3 19ms 4984 KiB
21 Elfogadva 3/3 19ms 5060 KiB
22 Elfogadva 3/3 18ms 5028 KiB
23 Elfogadva 3/3 19ms 5176 KiB