Cod sursă (job #582159)

Utilizator avatar Vlad_Anica Anica-Popa Vlad-Ioan Vlad_Anica IP ascuns
Problemă Pointeri Compilator cpp-32 | 1,10 kb
Rundă Arhiva de probleme Status evaluat
Dată 17 feb. 2021 13:02:58 Scor 50
#include <fstream>

#define NIL -1
#define MAXN 200000

using namespace std;

ifstream fin("pointeri.in");
ofstream fout("pointeri.out");

int st[MAXN], dr[MAXN];

inline void Construct(int poz, int* prim, int* ultim) {
    if (st[poz] != NIL) {
        Construct(st[poz], prim, ultim);
    }

    if ((*prim) == NIL) {
        (*prim) = poz;
        (*ultim) = poz;
    }
    else {
        st[poz] = (*ultim);
        dr[*ultim] = poz;
        (*ultim) = poz;
    }

    if (dr[poz] != NIL) {
        Construct(dr[poz], prim, ultim);
    }
}

inline void Read(void){

    int n, rad;
    fin >> n >> rad;

    for (int i = 0; i <  n; i++) {
        fin >> st[i];
    }

    for (int i = 0; i < n; i++) {
        fin >> dr[i];
    }

    int prim = -1, ultim = -1;

    Construct(rad, &prim, &ultim);

    fout << prim << "\n";

    for (int i = 0; i < n; i++) {
        fout << st[i] << " ";
    }

    fout << "\n";

    for (int i = 0; i < n; i++) {
        fout << dr[i] << " ";
    }
}

int main () {
    Read();

    fin.close(); fout.close(); return 0;
}