//------------------------------------集合---------------------------------//
/*
题目描述
给你两个集合,要求{A} + {B}。 注:同一个集合中不会有两个相同的元素。
输入描述:
每组输入数据分为三行,第一行有两个数字n,m(0 ≤ n,m ≤ 10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超过int范围的整数,每个元素之间有个空格隔开。
输出描述:
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开,行末无空格。
示例1
输入
3 3
1 3 5
2 4 6
输出
1 2 3 4 5 6
*/
/*
我使用了两种方法
第一种是标准库的set,用这个比较简单,不用判断数字是否重复,因为set就是不重复,
并且排序的集合,默认排序为升序,如果遇到相同的数,会直接忽略,不重复的数才放
入,在stl内部使用红黑树实现的,这是一个平衡二叉树,不做太多说明。
第二种用的vector,把所有数push_back进去,用算法sort排序后,用unique删除重
复元素(去除重复元素后,空间还是在那里,需要用erase删除空间)
*/
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
using namespace std;
int f8()
{
//法1
int numA, numB;
cin >> numA >> numB;
int temp;
set<int> s;
for (int i = 0; i < numA; ++i)
{
cin >> temp;
s.insert(temp);
}
for (int i = 0; i < numB; ++i)
{
cin >> temp;
s.insert(temp);
}
auto ptr = s.cbegin();
for (int i = 0; i < s.size() - 1; ++i)
{
cout << *ptr << " ";
++ptr;
}
cout << *ptr;
return 0;
//法2
/*
int numA, numB;
cin >> numA >> numB;
vector<int> A, B;
int temp;
for(int i = 0; i < numA; ++i)
{
cin >> temp;
A.push_back(temp);
}
for(int i = 0; i < numB; ++i)
{
cin >> temp;
B.push_back(temp);
}
vector<int> vec(A);
for(int i = 0; i < B.size(); ++i)
vec.push_back(B[i]);
sort(vec.begin(), vec.end());
auto ptr = unique(vec.begin(), vec.end());
vec.erase(ptr, vec.end());
for(int i = 0; i < vec.size() - 1; ++i)
cout << vec[i] << " ";
cout << *(vec.cend() - 1);
return 0;
*/
}