题目链接: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;
}

  

最新文章

  1. 关于STM32的FLASH操作【转载】
  2. MVVM架构~knockoutjs系列之一些异常的总结(永久更新)
  3. 【转】UML类图几种关系的总结
  4. 关于c++数的进制的经验
  5. 用jquery追加的元素不能触发treeview事件
  6. Git 使用规范流程
  7. A*算法为什么是最优的
  8. 【转】Android ProgressDialog的使用2
  9. PHP 通过随机数获得ASCII 值返回字符。
  10. Dalvik虚拟机JNI方法的注册过程分析
  11. 数字(数学)操作类 Math Random 类 ,大数字操作类
  12. koahub.js 0.09 发布,新增钩子机制
  13. Python制作二维码和条形码扫描器 (pyzbar)
  14. 关系数据库标准语言SQL——概述
  15. Linux用户组相关指令
  16. 如何进行bug总结
  17. Booting LPC-Link2, Updating LPCXpresso firmware
  18. HttpServletResponse输出的中文乱码
  19. ORACLE telnet 1521 不通及ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务的解决
  20. The meterprter basic commonds

热门文章

  1. oracle 压力测试工具benchmarksql
  2. lambda表达式2
  3. windows 解放鼠标快捷键
  4. Ubuntu教程
  5. Three.js基础学习【修改版】
  6. flex布局大讲解
  7. 自适应:用JS做的自适应,是最差的自适应,记页面刷新前后尺寸变化
  8. nginx学习笔记(一)
  9. 下载时出现using cached如何解决
  10. python学习初始函数