Pagini recente » Cod sursa (job #1744317) | Cod sursa (job #2880807) | Cod sursa (job #3153281) | Cod sursa (job #2045393) | Cod sursa (job #2503007)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("schi.in");
ofstream fout("schi.out");
int n;
struct lis{
lis *fo, *ba;
int v;
lis(int v) : v(v){
fo = ba = this;
}
};
lis *fi;
lis *pu;
int pup;
int choisir(int a, int b, int c){
if(a < b && a < c){
return 1;
}else if(b < a && b < c){
return 2;
}else{
return 3;
}
}
int mabs(int a){
if(a < 0){
a = -a;
}
return a;
}
void ard(int p, int v){
lis *nu = new lis(v);
if(v == 1){
fi = nu;
}else{
lis *cu = fi;
int c = choisir(p-1, v-p, mabs(pup-p));
int st;
if(c == 1 || c == 2){
cu = fi;
if(c == 1){
st = 1;
}else{
st = v;
}
}else{
cu = pu;
st = pup;
}
if(p - st > 0){
for(int i = st; i < p; i++){
cu = cu->fo;
}
}else{
for(int i = st; i > p; i--){
cu = cu->ba;
}
}
nu->fo = cu;
nu->ba = cu->ba;
nu->fo->ba = nu;
nu->ba->fo = nu;
if(p == 1){
fi = nu;
}
}
pu = nu;
pup = p;
}
void tez(int a){
lis *cu = fi;
for(int i = 1; i <= a; i++){
cout << cu->v << " ";
cu = cu->fo;
}
cout << "\n";
}
int main(){
fin >> n;
for(int i = 1; i <= n; ++i){
int p;
fin >> p;
ard(p, i);
}
lis *cu = fi;
for(int i = 1; i <= n; i++){
fout << cu->v << "\n";
cu = cu->fo;
}
return 0;
}