128652025-01-02 17:49:55SRobBináris fa magassága (50 pont)cpp17Időlimit túllépés 20/50600ms1200 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;



int main()
{
	
	int size,O;
	size = 0;
	O = 0;
	cin >> size >> O;
	vector<int> edges(pow(2,size)-2); 
  vector<int> vegyertek(pow(2,size)-2);
  vector<int> eddigMagassag(pow(2,size)-2 + 2);

	for (int i = 0; i < pow(2,size)-2; i++) // az EGÉSZ EDGES tömböt 2-től indexeljük
	{
		vegyertek[i] = floor(log2(i+2));
		edges[i] = 1;
	}
	//for (int i = 0; i < pow(2,size)-2; i++) //ell
	//{
	//	cout<<edges[i];
	//}
	
	//műveletek beolv és feladat megoldása a cikluson belül (még hiányzik a ciklus!)
	int mE, v, max,X,D,A; //mE: változtatott edge, V:változtatás, D: változtatás mértéke a szinthez képest,
	//X: milyen "messze" vagyunk mE-től
	//A: ugrás utáni számláló
	//  mostaniEdge, változtatás
	X = 0;
	A = 0;
	D = 0;
	
	for (int i = 0; i < O; i++) // az EGÉSZ EDGES tömböt 2-től indexeljük
	{
	    X = 0;
	    A = 0;
	    D = 0;
      cin >> mE >> v;
      
      D = v - edges[mE-2];
      edges[mE-2] = v;
      
    	
    	for(int j = mE; j <= pow(2,size); j++)
    	{
    	  
    	 if(X == 0 && j-2 < pow(2,size-1)) // nem utolsó szint és nem váltott még szintet
    	  {
    	    vegyertek[j-2] += D;
    	    j = j*2;
    	    
    	    X++;
    	    A = 0;
    	    //cout <<"A";
    	  }
    	  else if( X == 0 && j-2 >= pow(2,size-1)) // utolsó szinten van és nem váltott még szintet
    	  {
    	    //cout <<"B";
    	    vegyertek[j-2] += D;
    	    j = pow(2,size);
    	  }
    	  else if(X != 0 && A < pow(2,X)-1 && j-2 < pow(2,size-1)) // nem utolsó szinten van és még nem ért a szint végére
    	  {
    	    A++;
    	    vegyertek[j-3] += D;
    	    //cout <<"C";
    	    
    	  }
    	  else if(X != 0 && A >= pow(2,X)-1 && j-2 <= pow(2,size-1)) // nem utolsó szinten van
    	  {
    	    X++;
    	    vegyertek[j-3] += D;
    	    A++;
    	    j = (j-A)*2; // az ugrás utáni rögtöni állapotról kell ujra ugranunk
    	    A = 0;
    	    //cout <<"D";
    	  }
    	  else if(X != 0 && A <= pow(2,X)-1 && j-2 >= pow(2,size-1))//utolsó szinten van és már szintet váltott és
    	  {
    	    A++;
    	    
    	    vegyertek[j-3] += D;
    	    //cout<<"E";
    	  }
    	}
    	/*for (int k = 0; k < pow(2,size)-2; k++) //ell
      //{
  		  //cout<<" "<<vegyertek[k];
	    }*/
    	
    	max = vegyertek[pow(2,size-1)-2];
    	for(int j = pow(2,size-1)-2+1; j < pow(2,size)-2;j++)
    	{
    	  if(vegyertek[j]>max)
    	  {
    	    max = vegyertek[j];
    	  }
    	}
    	cout<<max <<endl;
    	//cout<<endl<<max << endl<<"-----"<< endl;
	}
}
  
RészfeladatÖsszpontTesztVerdiktIdőMemória
base20/50
1Elfogadva0/01ms320 KiB
2Időlimit túllépés0/0582ms1080 KiB
3Elfogadva2/23ms320 KiB
4Elfogadva2/23ms508 KiB
5Elfogadva2/23ms320 KiB
6Elfogadva2/24ms508 KiB
7Elfogadva3/37ms320 KiB
8Elfogadva3/39ms320 KiB
9Elfogadva3/318ms320 KiB
10Elfogadva3/317ms320 KiB
11Időlimit túllépés0/2598ms1080 KiB
12Időlimit túllépés0/2600ms1196 KiB
13Időlimit túllépés0/2600ms1132 KiB
14Időlimit túllépés0/2578ms1080 KiB
15Időlimit túllépés0/2586ms1080 KiB
16Időlimit túllépés0/2600ms1080 KiB
17Időlimit túllépés0/2598ms1200 KiB
18Időlimit túllépés0/2591ms1080 KiB
19Időlimit túllépés0/2583ms1080 KiB
20Időlimit túllépés0/3598ms1192 KiB
21Időlimit túllépés0/3600ms1080 KiB
22Időlimit túllépés0/3582ms1080 KiB
23Időlimit túllépés0/3579ms1080 KiB