2018 Multi-University Training Contest 2
2024-10-16 06:33:28
题目链接:2018 Multi-University Training Contest 2
6318 Swaps and Inversions
题意:sum=x*逆序个数+交换次数*y,使sum最小
思路:反复观察发现,如果有逆序对,那么就一定有相邻的逆序对,而且交换他们一定是合理的
进一步发现,逆序对的数量即是最大交换的次数,最后,ans=min(x,y)*逆序个数
使用分治排序求逆序对个数:
#include<cstdio>
#include<iostream>
#include<set>
using namespace std;
const int maxn=1e5+10;
long long ans;
int num[maxn],num2[maxn]; void ins(int bg,int md,int ed)
{
int a=bg,b=md+1;
int now=bg;
while(a<=md&&b<=ed)
{
if(num[a]<=num[b])num2[now]=num[a],a++;
else num2[now]=num[b],b++,ans+=(md-a+1);
now++;
}
while(a<=md)num2[now++]=num[a++];
while(b<=ed)num2[now++]=num[b++];
for(int i=bg;i<=ed;i++)num[i]=num2[i];
} void mysort(int bg,int ed)
{
if(bg==ed)return;
int md=(bg+ed)/2;
mysort(bg,md);
mysort(md+1,ed);
ins(bg,md,ed);
} int main()
{
int n,a,b;
while(cin>>n>>a>>b)
{
ans=0;
for(int i=1;i<=n;i++)
scanf("%d",&num[i]);
mysort(1,n);
cout<<ans*min(a,b)<<endl;
}
return 0;
}
最新文章
- 关于STM32的FLASH操作【转载】
- MVVM架构~knockoutjs系列之一些异常的总结(永久更新)
- 【转】UML类图几种关系的总结
- 关于c++数的进制的经验
- 用jquery追加的元素不能触发treeview事件
- Git 使用规范流程
- A*算法为什么是最优的
- 【转】Android ProgressDialog的使用2
- PHP 通过随机数获得ASCII 值返回字符。
- Dalvik虚拟机JNI方法的注册过程分析
- 数字(数学)操作类 Math Random 类 ,大数字操作类
- koahub.js 0.09 发布,新增钩子机制
- Python制作二维码和条形码扫描器 (pyzbar)
- 关系数据库标准语言SQL——概述
- Linux用户组相关指令
- 如何进行bug总结
- Booting LPC-Link2, Updating LPCXpresso firmware
- HttpServletResponse输出的中文乱码
- ORACLE telnet 1521 不通及ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的解决
- The meterprter basic commonds