132822025-01-07 12:03:28AblablablaBináris fa magassága (50 pont)cpp17Elfogadva 50/50131ms1200 KiB
#include <bits/stdc++.h>

using namespace std;

vector<int> szulo;

struct segTree{
    int meret = 1;
    vector<int> fa;

    int epit(int a, int b, int ind){
        if(a == b){
            return fa[ind] = 0;
        }

        int k = (a + b) / 2;

        return fa[ind] = max(epit(a, k, 2 * ind + 1), epit(k + 1, b, 2 * ind + 2)) + 1;
    }

    void meretez(int n){
        meret = (n + 1) / 2;
        fa.assign(2 * meret - 1, 0);

        epit(0, meret - 1, 0);
    }

    int valt(int a, int b, int ind, int kezd, int veg){
        if(kezd <= a && b <= veg){
            return fa[ind];// + ert;
        } else if(b < kezd || veg < a){
            return fa[ind];
        }

        int k = (a + b) / 2;

        fa[ind] = max(valt(a, k, 2 * ind + 1, kezd, veg) + szulo[2*ind+1], valt(k + 1, b, 2 * ind + 2, kezd, veg) + szulo[2*ind+2]);
        return fa[ind];
    }
};

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

    segTree fa;
    n = (1 << n) - 1;
    fa.meretez(n);

    szulo.assign(n, 1);

    while(m--){
        int a, b;
        cin >> a >> b;


        int msb = 0;
        for(int i = 30; i >= 0; i--){
            if(a & (1 << i)){
                msb = i;
                break;
            }
        }
        int poz = a - (1 << msb);

        int szeles = (1 << (mas - msb - 1));
        int kezd = poz * szeles;

        a--;

        //cout << 0 << " " << fa.meret - 1 << " " << kezd << " " << kezd + szeles - 1 << " " << b - szulo[a] << "\n";
        szulo[a] = b;
        fa.valt(0, fa.meret - 1, 0, kezd, kezd + szeles - 1);

        cout << fa.fa[0] << "\n";
        /*for(int x : fa.fa){
            cout << x << " ";
        }
        cout << "\n";
        for(int x : szulo){
            cout << x << " ";
        }
        cout << "\n";*/
    }
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base50/50
1Elfogadva0/01ms316 KiB
2Elfogadva0/0115ms1076 KiB
3Elfogadva2/23ms328 KiB
4Elfogadva2/23ms508 KiB
5Elfogadva2/23ms316 KiB
6Elfogadva2/23ms316 KiB
7Elfogadva3/33ms316 KiB
8Elfogadva3/33ms316 KiB
9Elfogadva3/33ms316 KiB
10Elfogadva3/33ms316 KiB
11Elfogadva2/2131ms996 KiB
12Elfogadva2/2128ms1024 KiB
13Elfogadva2/2131ms972 KiB
14Elfogadva2/2125ms1076 KiB
15Elfogadva2/2127ms1076 KiB
16Elfogadva2/2122ms1076 KiB
17Elfogadva2/2119ms1084 KiB
18Elfogadva2/2115ms1076 KiB
19Elfogadva2/2118ms1200 KiB
20Elfogadva3/3123ms996 KiB
21Elfogadva3/3122ms948 KiB
22Elfogadva3/3115ms1072 KiB
23Elfogadva3/3112ms1076 KiB