
1 #include<stdio.h> 2 #include<stdlib.h> 3 typedef struct Node{ 4 int data; 5 Node*next,*pre; 6 int freq; 7 }Node,*LinkList; 8 Create(LinkList*L) 9 { 10 int length,e; 11 Node*t,*r; 12 *L=(LinkList)malloc(sizeof(Node)); 13 r=*L; 14 scanf("%d",&length); 15 for(int i=0;i<length;i++) 16 { 17 scanf("%d",&e); 18 t=(LinkList)malloc(sizeof(Node)); 19 t->data=e; 20 r->next=t; 21 t->pre=r; 22 t->freq=0; 23 r=t; 24 } 25 r->next=*L; 26 (*L)->pre=r; 27 } 28 Visit(int e,LinkList L) 29 { 30 Node*t=L->next,*r=L->next; 31 while(t->data!=e) t=t->next; 32 t->freq++; 33 while(r->freq>=t->freq) r=r->next; 34 t->next->pre=t->pre; 35 t->pre->next=t->next; 36 r->pre->next=t; 37 t->pre=r->pre; 38 r->pre=t; 39 t->next=r; 40 } 41 Order(LinkList L) 42 { 43 Node*t=L->next; 44 while(t!=L) 45 { 46 printf("%d ",t->data); 47 t=t->next; 48 } 49 } 50 int main() 51 { 52 LinkList L; 53 int n,e; 54 Create(&L); 55 scanf("%d",&n); 56 for(int i=1;i<=n;i++) 57 { 58 scanf("%d",&e); 59 Visit(e,L); 60 } 61 Order(L); 62 return 0; 63 64 }