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; }