127772024-12-30 11:55:29SRobBináris fa magassága (50 pont)cpp17Időlimit túllépés 20/50600ms1080 KiB
// binaris_fa_magassaga_2024_12_29.cpp : Defines the entry point for the console application.
//

//#include "stdafx.h"

#include <vector>
#include <math.h>
#include <iostream>
#include <cmath>

using namespace std;

void TreeCheck(int i, int curr, int size, vector<int>& edges ,vector<int>& vegyertek, vector<int>& eddigMagassag) // megszerzi az egyik vegyérték elemig tartó magasságot
{// az & azért kell mivel anélkül a pass by value elv miatt csak a vegyertek másolatait adná tovább és azt változtatná a függvény, nem az eredetit változtatja, így magát az eredeti tömböt/listát változtatja
	if (int(floor(log2(i))) < size-1 && i < edges.size())
	{
	      eddigMagassag[i] = curr;
		    curr += edges[i];
		    
		    TreeCheck(i*2,curr,size,edges, vegyertek,eddigMagassag);
        TreeCheck(i*2 + 1,curr,size,edges, vegyertek,eddigMagassag);
	}
  else if(int(floor(log2(i))) == size-1 && i < edges.size())
  {
        eddigMagassag[i] = curr;
    	  curr += edges[i];
    	  
    	  vegyertek[i-pow(2,size-1)] = curr;
    	  
  }
}

int main()
{
	
	int size,O;
	size = 0;
	O = 0;
	cin >> size >> O;
	vector<int> edges(pow(2,size)-2 + 2); // szar az indexelés a TreeCheck-ben
  vector<int> vegyertek(pow(2,size-1));
  vector<int> eddigMagassag(pow(2,size)-2 + 2);
  edges[0,1] = 0; 
	for (int i = 0; i < pow(2,size)-2+2; i++) // az EGÉSZ EDGES tömböt 2-től indexeljük
	{
		edges[i+2] = 1;
	}
	for (int i = 0; i < pow(2,size-1); i++) // 
	{
		vegyertek[i] = 0;
	}
	//műveletek beolv és feladat megoldása a cikluson belül (még hiányzik a ciklus!)
	int mE, v, max; 
	//  mostaniEdge, változtatás
	for (int i = 0; i < O; i++) // az EGÉSZ EDGES tömböt 2-től indexeljük
	{
    		cin >> mE >> v;
    	edges[mE] = v;
    	if(i == 0)
    	{
    	  TreeCheck(2,0,size,edges,vegyertek,eddigMagassag);
    	  TreeCheck(3,0,size,edges,vegyertek,eddigMagassag);
    	}
    	else
    	{
    	  TreeCheck(mE,eddigMagassag[mE],size,edges,vegyertek,eddigMagassag);
    	}
    	
    	max = vegyertek[0];
    	for (int i = 1; i < pow(2,size-1) ; i++) //ell kiírás
    	{
    		if(vegyertek[i] > max)
    		{
    		  max = vegyertek[i];
    		}
    	}
    	cout<<max<< endl;
	}
	
	
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/01ms320 KiB
2Időlimit túllépés0/0583ms824 KiB
3Elfogadva2/23ms320 KiB
4Elfogadva2/23ms320 KiB
5Elfogadva2/23ms320 KiB
6Elfogadva2/23ms508 KiB
7Elfogadva3/34ms320 KiB
8Elfogadva3/34ms320 KiB
9Elfogadva3/38ms320 KiB
10Elfogadva3/38ms320 KiB
11Időlimit túllépés0/2600ms1072 KiB
12Időlimit túllépés0/2600ms1068 KiB
13Időlimit túllépés0/2600ms1080 KiB
14Időlimit túllépés0/2582ms824 KiB
15Időlimit túllépés0/2578ms824 KiB
16Időlimit túllépés0/2600ms1080 KiB
17Időlimit túllépés0/2600ms1072 KiB
18Időlimit túllépés0/2583ms824 KiB
19Időlimit túllépés0/2580ms1080 KiB
20Időlimit túllépés0/3600ms1068 KiB
21Időlimit túllépés0/3598ms1016 KiB
22Időlimit túllépés0/3592ms828 KiB
23Időlimit túllépés0/3584ms1068 KiB