使用stl中的list就可以了,不知道为啥用reverse会wa,只能是一个个的插入list了,索幸没有超时。
代码:
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
const int inf=150000+7;
list<int>arr[inf];
void read(int &x)
{
char ch = getchar();x = 0;
for (; ch < '0' || ch > '9'; ch = getchar());
for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
}
int main()
{
int n,q,u,v,w,val,flag;
while( ~scanf("%d %d",&n,&q) )
{
for(int i=1;i<=q;i++)
{
read(flag);
if(flag==1)
{
read(u),read(w),read(val);
if(w==0)
arr[u].push_front(val);
else
arr[u].push_back(val);
}
else if(flag==2)
{
read(u),read(w);
if(w==0)
{
if(arr[u].empty())
{
printf("-1\n");
continue;
}
else
{
printf("%d\n",arr[u].front());
arr[u].pop_front();
}
}
else if(w==1)
{
if(arr[u].empty())
printf("-1\n");
else
{
printf("%d\n",arr[u].back());
arr[u].pop_back();
}
}
}
else
{
read(u),read(v),read(w);
if(w==0)
{ /*
arr[u].merge(arr[v] );
*/
while(!arr[v].empty())
{
arr[u].push_back( arr[v].front() );
arr[v].pop_front();
}
}
else
{/*
reverse(arr[v].begin(),arr[v].end());
arr[u].merge(arr[v] );*/
while(!arr[v].empty())
{
arr[u].push_back( arr[v].back() );
arr[v].pop_back();
}
}
}
}
for(int i=1;i<=n;i++)
arr[i].clear();
}
return 0;
}