2018 “百度之星”程序设计大赛 - 初赛(A): 度度熊学队列

直接用STL 的 list 就可以,比赛以为不行,自己手动模拟 list 去了。。。
代码:

#include
using namespace std;

const int maxn=150000+100;

listList[maxn];
listRevList[maxn];

int main(){

	int n,q;
	list::iterator it;
	while(scanf("%d%d",&n,&q)==2){
		
		for(int i=1;i<=n;i++) List[i].clear(),RevList[i].clear();
		while(q--){
			
			int type;
			scanf("%d",&type);
			if(type==1){
				
				int u,w,v;
				scanf("%d%d%d",&u,&w,&v);
				if(w==1) List[u].push_back(v),RevList[u].push_front(v);
				else List[u].push_front(v),RevList[u].push_back(v);
			}
			else if(type==2){
				
				int u,w;
				scanf("%d%d",&u,&w);
				if(List[u].empty()){
						
					printf("-1\n");
					continue;
				}
				if(w==1){
					
					printf("%d\n",List[u].back());
					List[u].pop_back();
					RevList[u].pop_front();
				}
				else{
					
					printf("%d\n",List[u].front());
					List[u].pop_front();
					RevList[u].pop_back();
				}
			}
			else{
				
				int u,v,w;
				scanf("%d%d%d",&u,&v,&w);
				if(w==1) List[u].splice(List[u].end(),RevList[v]),RevList[u].splice(RevList[u].begin(),List[v]);
				else List[u].splice(List[u].end(),List[v]),RevList[u].splice(RevList[u].begin(),RevList[v]);
//				for(it=List[u].begin();it!=List[u].end();it++) printf("%d ",*it);
//				printf("List end\n");
//				for(it=RevList[u].begin();it!=RevList[u].end();it++) printf("%d ",*it);
//				printf("RevList end\n");
			}
		}
	}
} 

你可能感兴趣的:(HDU,ACM)