题解:CF1918B Minimize Inversions

CF1918B Minimize Inversions

思路

暴力

一个一个的算,复杂度巨大。

数学规律

让逆序最少,也就是让升序更多。我们可以通过多组数据实验,最终我们会发现,将数列 A 减少一个逆序对,让数列 B 随着 A 变化,最多会只会增加一个逆序对。而让 A 相邻两个数保持升序,B 相邻两个数保持降序再排序,A 数列就会增加一个逆序,B 数列就会减少一个数列,导致不变,所以排序是最好的办法。

代码

#include<bits/stdc++.h>
using namespace std;
int t,n;
struct node{
    int a,b;
}q[200005];
bool cmp(node x,node y){
    return x.a<y.a;
}
int main(){
	cin>>t;
    while(t--){
    	cin>>n;
        for(int i=1;i<=n;i++)cin>>q[i].a;
        for(int i=1;i<=n;i++)cin>>q[i].b;
        sort(q+1,q+n+1,cmp);
        for(int i=1;i<=n;i++)cout<<q[i].a<<" ";
        puts("");
        for(int i=1;i<=n;i++)cout<<q[i].b<<" ";
        puts("");
    }
    return 0;
}
posted @   All_Unluck_Beginning  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示