Pagini recente » Cod sursa (job #685205) | Cod sursa (job #250881) | Cod sursa (job #1911457) | Cod sursa (job #3252513) | Cod sursa (job #2900723)
#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';
}