040:List
题面
-
总时间限制:
4000ms
-
内存限制:
65536kB
-
描述
写一个程序完成以下命令: new id ——新建一个指定编号为id的序列(id<10000) add id num——向编号为id的序列加入整数num merge id1 id2——合并序列id1和id2中的数,并将id2清空 unique id——去掉序列id中重复的元素 out id ——从小到大输出编号为id的序列中的元素,以空格隔开
-
输入
第一行一个数n,表示有多少个命令( n<=200000)。以后n行每行一个命令。
-
输出
按题目要求输出。
思路
利用了 S T L STL STL中 l i s t list list
二维的 l i s t list list,可以随时增加删除且能够合并两个 l i s t list list, l i s t [ ] . m e r g e ( ) list[].merge() list[].merge(), l i s t . s o r t ( ) list.sort() list.sort(), l i s t . u n i q u e ( ) list.unique() list.unique()
#include<iostream>
#include<algorithm>
#include<list>
using namespace std;
list<int>lis[10010];
int main() {
int n; cin >> n;
while (n--) {
string str;
int x1,x2;
list<int>::iterator it;
cin >> str;
switch (str[0]) {
case 'n':
cin >> x1;
break;
case 'a':
cin >> x1 >> x2;
lis[x1].push_back(x2);
break;
case 'm':
cin >> x1 >> x2;
lis[x1].merge(lis[x2]);
break;
case 'u':
cin >> x1;
lis[x1].sort();
lis[x1].unique();
break;
case 'o':
cin >> x1;
lis[x1].sort();
for (it = lis[x1].begin(); it != lis[x1].end(); ++it) {
cout << *it << " ";
}
cout << endl;
break;
}
}
}