Cod sursa(job #2106979)

Utilizator biaiftimeIftime Bianca biaiftime Data 16 ianuarie 2018 17:03:35
Problema Hashuri Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define Nmax 500002
using namespace std;
ifstream fin("curatenie.in");
ofstream fout("curatenie.out");
struct pereche
{
    int left,right;
}arb[Nmax];
int srd[Nmax],rsd[Nmax],poz[Nmax];
int n;
void Read()
{
    int i;
    fin>>n;
    for(i=1;i<=n;++i)
    {
        fin>>srd[i];
        poz[srd[i]]=i;
    }
    for(i=1;i<=n;++i) fin>>rsd[i];
}
void Solve(int left,int right,int rad)
{
    if(left<=right)
{
    int rad_left,rad_right;
    rad_left=rad+1;
    if(poz[rsd[rad]]>left)
    {
       arb[rsd[rad]].left=rsd[rad_left];
       Solve(left,poz[rsd[rad]]-1,rad_left);
    }
    else arb[rsd[rad]].left=0;
    rad_right=poz[rsd[rad]]-left+rad+1;
    if(poz[rsd[rad]]<right)
    {
        arb[rsd[rad]].right=rsd[rad_right];
        Solve(poz[rsd[rad]]+1,right,rad_right);
    }
    else arb[rsd[rad]].right=0;
}
}
void Print()
{
    int i;
    for(i=1;i<=n;++i)
    fout<<arb[i].left<<" "<<arb[i].right<<"\n";
}
int main()
{
    Read();
    Solve(1,n,1);
    Print();
    return 0;
}