Cod sursa(job #2900723)

Utilizator RaduAntoneoAntonio Alexandru Radu RaduAntoneo Data 12 mai 2022 00:04:03
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>
using namespace std;
 
ifstream f("curatenie.in");
ofstream g("curatenie.out");
#define cin f
#define cout g 

int poz_SRD[500001], RSD[500001], n, x, INDEX = 1;
pair<int, int> tree[500001];
 
void build(int stanga, int dreapta, int val) {
    if(poz_SRD[val] > stanga) {
        tree[val].first = RSD[++INDEX];
        build(stanga, poz_SRD[val] - 1, RSD[INDEX]);
    }
    if(poz_SRD[val] < dreapta) {
        tree[val].second = RSD[++INDEX];
        build(poz_SRD[val] + 1, dreapta, RSD[INDEX]);
    }
}

int main() {
    cin >> n;
    for(int i = 1; i <= n; i++) {
        cin >> x;
        poz_SRD[x] = i;
    }
    for(int i = 1; i <= n; i++)
        cin >> RSD[i];
    build(1, n, RSD[1]);
    for(int i = 1; i <= n; i++)
       cout << tree[i].first << " " << tree[i].second << '\n';    
}