ACM模板列表 https://blog.csdn.net/nameofcsdn/article/details/107235360
//把v分成前面k个和后面的v.size()-k个,返回拆出来的后面的数组,v本身只留k个
//2个vector拼接起来
//交叉交换,v1分成前面k1个和后面的v1.size()-k1个,v2同理,交换后面的2段
//把v分成前面k个和后面的v.size()-k个,返回拆出来的后面的数组,v本身只留k个
template<typename T>
vector<T> fchai(vector<T>&v,int k)
{
vector<T>v2;
v2.resize(v.size()-k);
copy(v.begin()+k,v.end(),v2.begin());
v.resize(k);
return v2;
}
//2个vector拼接起来
template<typename T>
vector<T> join(vector<T>&v1,vector<T>&v2)
{
vector<T>ans(v1.size()+v2.size());
copy(v1.begin(),v1.end(),ans.begin());
copy(v2.begin(),v2.end(),ans.begin()+v1.size());
return ans;
}
//交叉交换,v1分成前面k1个和后面的v1.size()-k1个,v2同理,交换后面的2段
template<typename T>
void change(vector<T>&v1,vector<T>&v2,int k1,int k2)
{
vector<T>v3=fchai(v1,k1),v4=fchai(v2,k2);
v1=join(v1,v4),v2=join(v2,v3);
}
//vector的字典序比较,v1<v2是true,v1>=v2是false
//vector的字典序排序
//vector的字典序比较,v1<v2是true,v1>=v2是false
template<typename T>
bool cmp(vector<T>&v1,vector<T>&v2)
{
for(int i=0;i<v1.size()&&i<v2.size();i++)
{
if(v1[i]!=v2[i])return v1[i]<v2[i];
}
return v1.size()<v2.size();
}
//vector的字典序排序
template<typename T>
void sortVector(vector<vector<T>>&v)
{
sort(v.begin(),v.end(),cmp<T>);
}