B. Minimize Inversions

原题链接

题解

逆序对数最小的排列是严格升序的排列,因此我猜想有一个严格升序的排列最优的
证明;
冒泡排序,我们把排列a中最大的元素不断地往右作相邻对换,这样一来,序列a的逆序对数必定减少一,序列b的逆序对数可能减少一,可能不变,可能加一,但是两个排列的总逆序对数不可能增加。
然后再逆着想验证了这种策略的可行性

codee

#include<bits/stdc++.h>
using namespace std;
struct unit
{
    int x,y;
}a[200005];
bool cmp(unit x,unit y)
{
    return x.x<y.x;
}
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i].x;
        for(int i=1;i<=n;i++) cin>>a[i].y;
        sort(a+1,a+1+n,cmp);
        for(int i=1;i<=n;i++) cout<<a[i].x<<" ";
        puts("");
        for(int i=1;i<=n;i++) cout<<a[i].y<<" ";
        puts("");
    }
    return 0;
}

posted @   纯粹的  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示