multiset容器和set不同的就是不去重。代码易懂。
s.erase(a);其中a是地址,而不是对应的数据。
#include<bits/stdc++.h>
//#include<set>
using namespace std;
int a[200010],b[200010];
multiset<int>s;
int main()
{
int n,k;
cin>>n;
for(int i=1;i<=n;i++) {cin>>a[i];}
for(int i=1;i<=n;i++) {cin>>k;s.insert(k);}
for(int i=1;i<=n;i++)
{
int ans=(n-a[i])%n;
auto it=s.lower_bound(ans);
if(it==s.end()){ it=s.begin();}
b[i]=*it;
s.erase(it);
}
for(int i=1;i<=n;i++)
cout<<(b[i]+a[i])%n<<" ";
cout<<endl;
return 0;
}