86972024-01-25 16:47:43AzukitsuBináris fa magassága (50 pont)cpp17Időlimit túllépés 20/50601ms30784 KiB
#include <iostream>
#include <vector>
#include <cmath>

using namespace std;


vector<vector<int>> keszito(vector<vector<int>> intervallumok, int current, int i, int j) {
    vector<int> intervallum(3);
    intervallum[0] = i;
    intervallum[1] = j;
    intervallum[2] = 1;
    intervallumok[current] = intervallum;
    if (i == j) {
        return intervallumok;
    }
    float kozep = (static_cast<float>(i) + static_cast<float>(j)) / 2;
    int also = floor(kozep);
    int felso = ceil(kozep);
    intervallumok = keszito(intervallumok, current*2, i, also);
    intervallumok = keszito(intervallumok, current*2+1, felso, j);
    return intervallumok;
}


int main()
{
    int N, M, sum = 0;
    cin >> N >> M;
    for (int i = 0; i<N; i++) {
        sum += pow(2, i);
    }
    //cout << sum << endl;
    int utolso_sor = pow(2, N-1);
    vector<int> magassagok(utolso_sor, N-1);
    vector<vector<int>> intervallumok(sum + 1);
    intervallumok = keszito(intervallumok, 1, 0, utolso_sor-1);
    //for (auto &r: vector<vector<int>>(intervallumok.begin()+1, intervallumok.end())) {
    //    cout << r[0] << " " << r[1] << endl;
    //}
    vector<vector<int>> parancsok;
    for (int i = 0; i < M; i++) {
        int a, b;
        cin >> a >> b;
        vector<int> parancs;
        parancs.push_back(a);
        parancs.push_back(b);
        parancsok.push_back(parancs);
    }
    //for (int i = 0; i < M; i++) {
    //    cout << parancsok[i][0] << " " << parancsok[i][1] << endl;
    //}
    for (auto &r : parancsok) {
        vector<int> intervallum = intervallumok[r[0]];
        for (int i = intervallum[0]; i <= intervallum[1]; i++) {
            magassagok[i] += r[1] - intervallum[2];
        }
        intervallumok[r[0]][2] = r[1];
        int maximum = 0;
        for (int i = 0; i < utolso_sor; i++) {
            //cout << magassagok[i] << " ";
            if (magassagok[i] > maximum) {maximum = magassagok[i];}
        }
        //cout << endl;
        cout << maximum << endl;
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/03ms1812 KiB
2Időlimit túllépés0/0601ms29448 KiB
3Elfogadva2/24ms2448 KiB
4Elfogadva2/24ms2660 KiB
5Elfogadva2/24ms2616 KiB
6Elfogadva2/24ms2872 KiB
7Elfogadva3/34ms2836 KiB
8Elfogadva3/34ms2848 KiB
9Elfogadva3/37ms3032 KiB
10Elfogadva3/37ms3164 KiB
11Időlimit túllépés0/2572ms30208 KiB
12Időlimit túllépés0/2574ms30372 KiB
13Időlimit túllépés0/2566ms30352 KiB
14Időlimit túllépés0/2546ms30364 KiB
15Időlimit túllépés0/2550ms30408 KiB
16Időlimit túllépés0/2570ms30536 KiB
17Időlimit túllépés0/2555ms30676 KiB
18Időlimit túllépés0/2563ms30548 KiB
19Időlimit túllépés0/2563ms30624 KiB
20Időlimit túllépés0/3551ms30556 KiB
21Időlimit túllépés0/3578ms30648 KiB
22Időlimit túllépés0/3555ms30784 KiB
23Időlimit túllépés0/3546ms30768 KiB