若您使用 multiset 启发式合并,那么不能直接在原来的set中删除然后插入。
正确代码 AC
void Join(multiset<int> x,multiset<int> &y){
if(x.size()>y.size()) x.swap(y);
multiset<int> res;
for(auto it=x.rbegin();it!=x.rend();it++){
auto i=y.end();i--;
int t=(max(*it,*i));
res.insert(t),y.erase(i);
}
for(int i:res) y.insert(i);
}
错误代码 WA #10 #11
void Join(multiset<int> x,multiset<int> &y){
if(x.size()>y.size()) x.swap(y);
auto i=y.end();i--;
for(auto it=x.rbegin();it!=x.rend();it++,i--){
int res=(max(*it,*i));
y.erase(i),i=y.insert(res);
}
}
(楼下古老帖子的楼主好像也是这个问题,可惜也许已经AFO了)