D题: #include<iostream> #include<algorithm> using namespace std; struct p{int id,ps;};//顾客编号与位置 bool comp(p a,p b){return(a.ps<b.ps);} int main() {     int i,tmp,n1,n2,l1,l2;     p *n;     cin>>n1>>n2;     l1=n1;     l2=-n2;//l1与l2是两支队伍的末尾位置,队伍2的位置用负数表示     n=new p[n1+n2];     for(i=0;i<n1;i++)         n[i].id=n[i].ps=i+1;     for(i=0;i<n2;i++)     {         n[i+n1].id=i+n1+1;         n[i+n1].ps=-i-1;     }     for(cin>>i;i>0;i--)     {         cin>>tmp;tmp--;         if(n[tmp].ps<0)         {             l1++;             n[tmp].ps=l1;         }         else         {             l2--;             n[tmp].ps=l2;         }//顾客离开造成的空位不回收,反正不会影响排序     }     sort(n,n+n1+n2,comp);     for(tmp=0;n[tmp].ps<0;tmp++);     for(i=tmp;i<n1+n2;i++)cout<<n[i].id<<' &(5528)#39;;cout<<endl;     for(i=tmp-1;i>=0;i--)cout<<n[i].id<<' &(5528)#39;;cout<<endl;//因为是负数所以倒着排     delete[]n; }