第18届浙江省赛-Mergeable Stack(List容器)

题目链接

这个也可以说很坑了!正确率才7% (吐。。。

stack,queue,string,通通别想过!
就是让Acmer记起来还有个被遗忘的容器list……(
list是用链表封装的,所以时间上占了一些优势

用list也要注意,cin也会卡掉时间!

最坑的是 cout也卡了时间…

scanf printf 才是大哥中的大哥
坑!!!

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define max(a,b)   (a>b?a:b)
#define min(a,b)   (a
//#define swap(a,b)  (a=a+b,b=a-b,a=a-b)
#define memset(a,v)  memset(a,v,sizeof(a))
#define X (sqrt(5)+1)/2.0  //Wythoff
#define Pi acos(-1)
#define e  2.718281828459045
#define eps 1.0e-8
using namespace std;
typedef long long int LL;
typedef pair<int,int>pa;
const int MAXL(3*1e5);
const int INF(0x3f3f3f3f);
const int mod(1e9+7);
int dir[4][2]= {{-1,0},{1,0},{0,1},{0,-1}};
list<int>l[MAXL+50];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n,q;
        scanf("%d%d",&n,&q);
        for(int i=0; i<=n; i++)
            l[i].clear();
        while(q--)
        {
            int x;
            scanf("%d",&x);
            if(x==1)
            {
                int s,v;
                scanf("%d%d",&s,&v);
                l[s].push_back(v);
            }
            else if(x==2)
            {
                int s;
                scanf("%d",&s);
                if(l[s].empty())
                    printf("EMPTY\n");
                else
                {
                    printf("%d\n",l[s].back());
                    l[s].pop_back();
                }
            }
            else
            {
                int s,t;
                scanf("%d%d",&s,&t);
                l[s].splice(l[s].end(),l[t]);//splice把链表t连接在链表s的后面,并同时释放链表t
            }
        }
    }
}

你可能感兴趣的:(无处可归的题)