#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
using namespace std;
struct sr { double a; char b[10]; };
int bjsr(struct sr* a, struct sr* b)
{
if ((*(a)).a == (*(b)).a) {
return 0;
}
if ((*(a)).a >(*(b)).a) {
return 1;
}
if ((*(a)).a <(*(b)).a) {
return -1;
}
}
struct lb { struct sr sj; struct lb* next; struct lb* qmd; };
void wnlb(struct lb** tou1,struct lb** wei1,struct lb**qjd1,struct lb** jd,int ms,int* fhz, struct lb** tou2, struct lb** wei2, struct lb** qjd2)
{
struct lb* tou = *(tou1); struct lb* wei = *(wei1); struct lb* htou = *(tou2); struct lb* hwei = *(wei2); if (ms != -1 && ms != 0 && ms != 1 && tou == NULL) { return; }
if (ms == 1||ms==0||ms==-1)
{
struct lb* qjd = *(qjd1);
struct lb* zjd = (struct lb*)malloc(sizeof(struct lb)); zjd->sj = (*(jd))->sj; zjd->qmd = NULL;
if (tou != NULL && qjd != NULL && ms == 0) { zjd->next = tou; tou = zjd; }
if (tou != NULL && qjd != NULL && ms == 1) { qjd->next = zjd; zjd->next = wei; qjd = zjd; }
if (tou != NULL && qjd != NULL && ms == -1) { qjd->next = zjd; zjd->next = wei; qjd = zjd; }
if (tou == NULL) { tou = zjd; zjd->next = wei; qjd = zjd;}
if (ms == -1)
{
if (htou != NULL) { zjd->qmd = *(qjd1); htou = zjd; }
if (htou == NULL) { htou = zjd; zjd->qmd = hwei; }
}
*(tou1) = tou; *(wei1)= wei; *(qjd1) = qjd; *(tou2) = htou; *(wei2) = hwei; return;
}
if (ms == 2)
{
if (tou != NULL)
{
struct lb* h2 = NULL; struct lb* h1 = tou; struct lb* h3 = NULL;
while (h1)
{
if (h1->next == wei) { wei = h1; }
h3 = h1->next; h1->next = h2; h2 = h1;
if (h1 != NULL)
{
} h1 = h3;
}tou->next = h1;
*(tou1) = wei; *(wei1) = h1;
}return;
}
if (ms == 3)
{
struct lb* bl = tou; struct lb* b2 = tou;
if (tou == NULL) { printf("kongde" ); return; }
while (bl != wei)
{
b2 = bl; bl = bl->next; b2->next = bl; free(b2);
} *(tou1) = NULL; *(wei1) = NULL; *(tou2) = NULL; *(wei2) = NULL; return;
}
if (ms == 4||ms==5||ms==6)
{
int a = 0; struct lb* k = tou; if (ms == 5) { k = *(qjd1); }
for (struct lb* i = k; i != wei; i = i->next)
{
if (ms == 5)
{
if (bjsr(&(i->sj), &(*(jd))->sj) == 0)
{
int b; if (k == tou) { b = 0; }else { b = *(fhz); }
a++; *(fhz) = a + b; *(qjd1) = i->next;return;
}
}
if (ms == 6)
{
if (*(fhz) == 0 && k->next == wei) { (* (jd))->sj = i->sj; *(fhz) = a + 1; return; }
if (*(fhz) == 0 && k!=wei && k->next!=wei){k = k->next->next;}
if (*(fhz) == 0 && k == wei) { (*(jd))->sj = i->sj; *(fhz) = a+1; return; }
if (*(fhz) > 0) { if (a == *(fhz)-1) { (*(jd))->sj = i->sj; return; } }
if (*(fhz) < 0 && *(fhz)+a >= 0) { k = k->next; }
if (*(fhz) < 0 && i->next == wei && *(fhz)+a >= -1) { (*(jd))->sj = k->sj; *(fhz) = a + *(fhz)+2; return; }
}
a++;
}if (ms == 5||ms==6) { a = 0; }*(fhz) = a; return;
}
if (ms == 7||ms==8)
{
struct lb* a = (struct lb*)malloc(sizeof(struct lb)); int b=0;
if (ms == 7) { a->sj = (*(jd))->sj; a->next = NULL; } struct lb* c = tou;
if (*(fhz) == 0&&ms==7)
{
a->next = tou; if (htou != NULL) { tou->qmd = a; a->qmd = hwei; *(wei2) = hwei; } tou = a; *(tou1) = tou; return;
}
if (*(fhz) == -1&& ms == 7)
{
if (htou == NULL) { printf("双链表才能直接尾插\n"); return; }
a->qmd = htou; htou->next = a; a->next = wei; htou = a; *(tou2) = htou; *(wei1) = wei; return;
}
if (*(fhz) == 1 && ms == 8)
{
tou = c->next; if (htou != NULL) { if (tou != wei) { tou->qmd = *(wei2); }if (tou == wei) { *(tou2) = NULL; } } free(c); *(tou1) = tou; return;
}
if (*(fhz) == -1 && ms == 8)
{
if (htou == NULL) { printf("双链表才能直接尾删\n"); return; }
struct lb* d = htou; htou = d->qmd; if (htou != hwei) { htou->next = *(wei1); }if (htou == hwei) { *(tou1) = NULL; } *(tou2) = htou; free(d); return;
}
for (struct lb* i = tou; i != wei; i = i->next)
{
b++;
if (b == *(fhz)&&ms==7)
{
c = i->next; i->next = a; a->next = c; if (htou != NULL) { a->qmd = i; if (htou != i) { a->next->qmd = a; } if (htou == i) { htou = a; *(tou2) = htou; } }return;
}
if (b == *(fhz)-1 && ms == 8){c = i;}
if (b == *(fhz) && ms == 8)
{
c->next = i->next; if (htou != NULL) { if (htou != i) { i->next->qmd = c; }if (htou == i) { *(tou2) = c; } } free(i); return;
}
}*(fhz) = 0;
}
if (ms == 9)
{
if (htou == NULL) { printf("你应该建立一个双链表\n"); return; }
struct lb* i = tou; struct lb* j = htou; struct lb* a = tou; struct lb* b = NULL;
if (!tou || tou->next == wei || tou == wei) {return; }
for (i = a->next; i != wei; i = i->next)
{
if (i!=NULL&&i!=wei&&bjsr(&i->sj, &a->sj) < 0)
{
struct lb* e = (struct lb*)malloc(sizeof(struct lb));
b = i->qmd; e->sj = i->sj;
e->next = tou; tou->qmd = e; e->qmd = hwei; tou = e;
b->next = i->next; if (htou != i) { i->next->qmd = b; }
else { htou = b; }free(i);
i = b;
}
}
if (a->next != wei&&i!=NULL) { b = a->next->qmd; }else { b = htou; }
wnlb(&tou, &a, NULL, NULL, 9, NULL, &b, &hwei, NULL);
wnlb(&a->next, &wei, NULL, NULL, 9, NULL, &htou, &a, NULL); *(tou1) = tou; *(tou2) = htou;
}
if (ms == 10)
{
if (*(qjd1) = *(qjd2)) { *(fhz) = 0; return; }
for (struct lb* i = tou; i != wei; i = i->next)
{
if (i == *(qjd1)) { *(fhz) = -1; return; }
if (i == *(qjd2)) { *(fhz) = 1; return; }
}*(fhz) = -2; return;
}
}
int main()
{
{
int fhz; struct lb* k1 = NULL; struct lb* l1 = NULL; struct lb* qjd1 = NULL;
struct lb* k = NULL; struct lb* l = NULL; struct lb* m = (struct lb*)malloc(sizeof(struct lb)); struct lb* qjd = NULL;
int fhznb; struct lb* k1nb = NULL; struct lb* l1nb = NULL; struct lb* qjd1nb = NULL;
struct lb* knb = NULL; struct lb* lnb = NULL; struct lb* mnb = (struct lb*)malloc(sizeof(struct lb)); struct lb* qjdnb = NULL;
int a = 0; int b = 0,c=0;
scanf("%d", &c);
for(int x=0;x<c;x++)
{
scanf("%d", &b); int d[1000];
for (int y = 0; y < b; y++)
{
scanf("%d", &d[y]);
}
for (int y = 0; y < b; y++)
{
if (d[y] == 0) {cin>> m->sj.a;wnlb(&k, &l, &qjd, &m, -1, &fhz, &k1, &l1, &qjd1); }
if (d[y] == 1) { cin>> mnb->sj.a; wnlb(&knb, &lnb, &qjdnb, &mnb, -1, &fhznb, &k1nb, &l1nb, &qjd1nb);
}
} wnlb(&k, &l, &qjd, &m, 9, &fhz, &k1, &l1, &qjd1);
for (struct lb* i = k; i != l; i = i->next)
{
{ cout<<i->sj.a<<" "; }
}if(k!=NULL){printf("\n");}
for (struct lb* i = knb; i != lnb; i = i->next)
{
{ cout<<i->sj.a<<" "; }
}if(knb!=NULL){printf("\n");}
}
}
return 0;
}