97412024-03-05 17:37:35matyiBináris fa magassága (50 pont)cpp17Időlimit túllépés 20/50600ms3716 KiB
#include <iostream>
#include <fstream>

using namespace std;

int gyorshatvany(int n)
{
    if (n==0)
        return 1;
    else
    {
        int hatvany=gyorshatvany(n/2); // 2^n/2
        if (n%2==0)
        {
            return hatvany * hatvany;
        }
        else
            return hatvany * hatvany * 2;
    }
}

void alakit(int suly[], int hossz[], int csp , int darabcsucs)
{
    hossz[csp]=hossz[csp/2]+suly[csp];
    if (csp*2 < darabcsucs){
        alakit(suly,hossz,csp*2, darabcsucs);
        alakit (suly, hossz, csp*2+1, darabcsucs);
    }
}
int main()
{

    int n,m;
    //ifstream fin("be.in");
    cin>>n>>m;
    int darabcsucs=gyorshatvany(n);
    int suly[darabcsucs]={0},hossz[darabcsucs]={0};
    int x,y;
    for (int i=2;i<darabcsucs;i++)
    {
        suly[i]=1;
        hossz[i]=hossz[i/2]+1;
    }
    for (int i=1;i<=m;i++)
    {
        cin>>x>>y;
        suly[x]=y;
        alakit(suly,hossz,x,darabcsucs);
        int maxi=-1;
        for (int i=darabcsucs-1;i>=darabcsucs/2;i--)
        {
            if (hossz[i]>maxi)
                maxi=hossz[i];
        }
        cout<<maxi<< endl;
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/03ms1872 KiB
2Időlimit túllépés0/0600ms1804 KiB
3Elfogadva2/24ms2280 KiB
4Elfogadva2/24ms2492 KiB
5Elfogadva2/24ms2708 KiB
6Elfogadva2/24ms2912 KiB
7Elfogadva3/34ms3000 KiB
8Elfogadva3/34ms3000 KiB
9Elfogadva3/34ms3000 KiB
10Elfogadva3/34ms3000 KiB
11Időlimit túllépés0/2600ms2664 KiB
12Időlimit túllépés0/2560ms2864 KiB
13Időlimit túllépés0/2569ms2916 KiB
14Időlimit túllépés0/2577ms3008 KiB
15Időlimit túllépés0/2556ms3072 KiB
16Időlimit túllépés0/2569ms3076 KiB
17Időlimit túllépés0/2577ms3072 KiB
18Időlimit túllépés0/2558ms3060 KiB
19Időlimit túllépés0/2549ms3284 KiB
20Időlimit túllépés0/3565ms3244 KiB
21Időlimit túllépés0/3556ms3192 KiB
22Időlimit túllépés0/3556ms3308 KiB
23Időlimit túllépés0/3566ms3716 KiB