Cod sursa(job #2761002)

Utilizator MadalinaKopaczMadalina Kopacz MadalinaKopacz Data 30 iunie 2021 00:32:16
Problema Patrate 3 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
using namespace std;
ifstream fin("curatenie.in");
ofstream fout("curatenie.out");

//aflam postord din io si pro
struct  nod { int left, right; };
int N;
int RSD[500005], SRD[500005], SDR[500005];
nod Arbore[500005];

void Citire()
{
    int x;
    fin >> N;
    for (int i = 1; i <= N; ++i)      //in ordine
    {
        fin >> x; SRD[i] = x;
        SDR[x] = i;
    }
    for (int i = 1; i <= N; ++i)  fin >> RSD[i];  //pre ordine
}

//stanga, dreapta si pozitia radacinii in pre-ord
void Rezolvare(int l, int r, int pr)   
{
    int radl, radr, rad;
    rad = RSD[pr];

    //am ceva la stanga
    if (SDR[rad] > l)   Arbore[rad].left = RSD[pr + 1];
    else  Arbore[rad].left = 0;

    //am ceva la dreapta
    if (SDR[rad] < r)   Arbore[rad].right = RSD[pr + SDR[rad] - l + 1];
    else   Arbore[rad].right = 0;

    if (Arbore[rad].left) Rezolvare(l, SDR[rad] - 1, pr + 1);
    if (Arbore[rad].right) Rezolvare(SDR[rad] + 1, r, pr + SDR[rad] - l + 1);
}

void Afisare()
{
    for (int i = 1; i <= N; ++i)
        fout << Arbore[i].left << " " << Arbore[i].right << "\n";
}

int main()
{
    Citire();
    //in preordine radacina e pe primul poz
    Rezolvare(1, N, 1);  
    Afisare();
    return 0;
}