215212026-01-13 11:25:23szabel26Bináris fa magassága (50 pont)cpp17Wrong answer 2/50119ms2376 KiB
#include <iostream>
#include <cmath>
#include <vector>
//#include <fstream>
#define ll long long
using namespace std;

//ifstream fin("be2.txt");
//ofstream fout("ki2.txt");

struct adat
{
    ll el_hossz;
    ll tav;
};

ll n, m, a, b, bal_range, jobb_range, i, j;
vector<adat> bal, jobb;
vector<ll> maxi;

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

    bal_range = pow(2, n - 1);
    jobb_range = pow(2, n - 2) * 3;

    bal.resize(bal_range + 1);
    jobb.resize(jobb_range + 1);

    bal[1].el_hossz = 0;
    bal[1].tav = 0;

    jobb[1].el_hossz = 0;
    jobb[1].tav = 0;
    for (i = 2; i <= bal_range; i = i * 2)
    {
        bal[i].el_hossz = 1;
        bal[i].tav = bal[i/2].tav + bal[i].el_hossz;
    }
    for (i = 3; i <= jobb_range; i = i * 2)
    {
        jobb[i].el_hossz = 1;
        jobb[i].tav = jobb[i/2].tav + jobb[i].el_hossz;
    }

    int ut = bal[bal_range].tav;

    ll szint = 0;
    ll bal_kezd = 0, jobb_kezd = 0;
    for (i = 1; i <= m; ++i)
    {
        cin >> a >> b;

        szint = floor(log2(a));
        bal_kezd = pow(2, szint);
        jobb_kezd = bal_kezd + pow(2, szint-1);

        if (a >= bal_kezd && a < jobb_kezd)
        {
            a = bal_kezd;
            bal[a].el_hossz = b;
            bal[a].tav = bal[a / 2].tav + bal[a].el_hossz;
            for (j = a * 2; j <= bal_range; j = j * 2)
            {
                bal[j].tav = bal[j / 2].tav + bal[j].el_hossz;
            }
        }
        else
        {
            a = jobb_kezd;
            jobb[a].el_hossz = b;
            jobb[a].tav = jobb[a / 2].tav + jobb[a].el_hossz;
            for (int j = a * 2; j <= jobb_range; j = j * 2)
            {
                jobb[j].tav = jobb[j / 2].tav + jobb[j].el_hossz;
            }
        }

        if (bal[bal_range].tav > jobb[jobb_range].tav)
        {
            maxi.push_back(bal[bal_range].tav);
        }
        else
        {
            maxi.push_back(jobb[jobb_range].tav);
        }
    }

    for (auto &e : maxi)
    {
        cout << e << endl;
    }

    return 0;
}
SubtaskSumTestVerdictTimeMemory
base2/50
1Accepted0/01ms316 KiB
2Wrong answer0/0101ms2324 KiB
3Accepted2/23ms508 KiB
4Wrong answer0/23ms316 KiB
5Wrong answer0/23ms416 KiB
6Wrong answer0/23ms316 KiB
7Wrong answer0/33ms416 KiB
8Wrong answer0/33ms316 KiB
9Wrong answer0/33ms396 KiB
10Wrong answer0/33ms316 KiB
11Wrong answer0/2119ms2244 KiB
12Wrong answer0/2115ms2296 KiB
13Wrong answer0/2119ms2248 KiB
14Wrong answer0/2104ms2224 KiB
15Wrong answer0/2119ms2220 KiB
16Wrong answer0/2109ms2224 KiB
17Wrong answer0/2109ms2224 KiB
18Wrong answer0/298ms2224 KiB
19Wrong answer0/2108ms2224 KiB
20Wrong answer0/3109ms2244 KiB
21Wrong answer0/3116ms2292 KiB
22Wrong answer0/3100ms2376 KiB
23Wrong answer0/397ms2224 KiB