题意:

给出一个数列,你要对这个数列的数字进行k次交换操作,使得交换之后的数列逆序对虽少。

思路:

求原数列的逆序对,再和k比就行了。求逆序对要用归并排序,因为树状数组开不下。

代码:

#include<cstdio>
#include<cstring>
#include<climits>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<map>
#include<vector>
#include<set>
#include<sstream>using namespace std;long long _count;int _left[2500003], _right[2500003];void merge(int* a, int p, int q, int r)
{int i, j, k, n1, n2;n1 = q-p+1;n2 = r-q;for (i=0; i<n1; i++){_left[i] = a[p+i];}for (i=0; i<n2; i++){_right[i] = a[q+i+1];}_left[n1] = _right[n2] = 0x7fffffff;i = j = 0;for (k=p; k<=r; k++){if (_left[i] <= _right[j]){a[k] = _left[i];i++;}else{a[k] = _right[j];j++;_count += n1-i; /**此步骤是在归并排序法中加的一句,用来计数求逆序数的数目**/}}return;
}void mergesort(int* a, int p, int r)
{int q;if (p < r){q = (p+r)/2;mergesort(a, p, q);mergesort(a, q+1, r);merge(a, p, q, r);}return ;
}int a[1000005];int main()
{int n,m;int cas=1;while(EOF != scanf("%d %d",&n, &m) ) {_count=0;for(int i = 0; i < n; i++) {scanf("%d",&a[i]);}mergesort(a,0,n-1);int ans;_count-=m;int flag=0;for(int i=1;i<n;i++){if(a[i]==a[i-1]){flag=1;break;}}if(_count<0){_count=-_count;if(_count%2==0)ans=0;elseif(flag)ans=0;elseans=1;}elseans=_count;printf("Case #%d: %d\n",cas++,ans);}return 0;
}

hust1347(归并排序求逆序对)相关推荐

  1. 信息竞赛进阶指南--归并排序求逆序对

    // 归并排序求逆序对 void merge(int l, int mid, int r) {// 合并a[l~mid]与a[mid+1~r]// a是待排序数组, b是临时数组, cnt是逆序对个数 ...

  2. 分治法:归并排序求逆序对

    现给出这个定义,什么是逆序对,NOIP火柴排队这个题是逆序对的一个比较好的例题,这里我们只讨论求逆序对的一些高效的算法 一般有归并排序以及树状数组两种方法,本文只讨论归并排序求逆序对 这里不给出原理只 ...

  3. 归并排序求逆序对(C语言)

    目录 1.归并排序过程 (1)逆序对概念 (2)基本思想 (3)算法实现 1.归并排序过程 使用归并排序实现求逆序对,那么首先得了解什么是归并排序(关于归并排序可以求逆序对,也是在做题中学会的). 首 ...

  4. -9 逆序输出一个整数的各位数字_【每日算法】基础算法——归并排序[求逆序对的数量](四)(思想很经典)...

    题目内容 给定一个长度为n的整数数列,请你计算数列中的逆序对的数量. 逆序对的定义如下:对于数列的第 i 个和第 j 个元素,如果满足 i < j 且 a[i] > a[j],则其为一个逆 ...

  5. codeforces 414C C. Mashmokh and Reverse Operation(归并排序求逆序对)

    题目链接: C. Mashmokh and Reverse Operation time limit per test 4 seconds memory limit per test 512 mega ...

  6. 利用归并排序求逆序对

    在逆序对的问题中,如果采用暴力求解的方法,一般也是有效的,但是O(n2)时间复杂度实在是难以接受的.但是对于逆序对问题,却有一个看似不想关的算法来解决–归并排序.时间复杂度和空间复杂度完全与归并排序一 ...

  7. 归并排序——求逆序对个数

    求解逆序对个数 逆序对 对于一个包含N个非负整数的数组A[1-n],如果有i < j,且A[ i ]>A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对. 例如,数组( ...

  8. 【NOI导刊】【归并排序求逆序对】最接近神的人

    题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门上方用古代文写着"神的殿堂".小FF猜 ...

  9. 逆序对算法c语言,归并排序求逆序对的代码(C语言)

    #include #include #define MAX 32767 int merge(int *array, int p,int q,int r) { //归并array[p...q] 与 ar ...

最新文章

  1. 三层交换机环境的上网行为管理方案
  2. DevOps 工具链可推动你的创新计划!
  3. 一个html文档所需要的最基本的标记对是,川大《WEB技术》19秋在线作业1题目【标准答案】...
  4. Android DrawLayout + ListView 的使用(一)
  5. 【Java数据结构】链表的增、删、返回指定位置元素(添加泛型)
  6. OpenCV Mat主要用法(2)_MatExpr
  7. 【Pre蓝桥杯嵌入式】如何直接使用LCD例程来作为赛场使用的工程
  8. 95-140-128-源码-transform-算子maxMin
  9. Invalid bound statement (not found)错误的可能原因分析
  10. Linux断开进程的某个socket,Linux Socket:如何在客户端程序中检测断开的网络?
  11. 进阶之路:Java 日志框架全画传(上)
  12. 算法:Regular Expression Matching(正则表达式匹配)
  13. linux 取消u盘写保护,如何关闭u盘写保护?u盘写保护怎么去掉?
  14. 论文查重软件哪个好用?
  15. Win10不能禁和不建议禁的服务以及禁用后的影响
  16. 12、【易混淆概念集】-第六章3 资源平衡 VS 资源平滑 进度压缩 制定进度计划 定义活动 里程碑清单
  17. cad转excel插件c2e_cad表格转换器2016
  18. jquery表格日历写入html代码,基于jQuery日历插件制作日历
  19. [oeasy]python0131_[趣味拓展]各种符号_汉语拼音符号_中文全角英文字母_中文全角标点
  20. Java 添加 Excel 文本水印和图片水印及,及其他操作文档

热门文章

  1. Python机器学习(1)-- 自己设计一个感知机(Perceptron)分类算法
  2. c4d流体插件_【C4D】流体插件详细讲解
  3. VTK修炼之道28:图像统计_灰度直方图计算
  4. C/C++头文件一览
  5. sqlserver存储过程的参数传递注意事项
  6. JQuery动态执行javascript代码的方法
  7. Asp.net 中使用单独类文件
  8. FFmpg音视频入门教程
  9. linux_unix编程手册-信号概述signal函数
  10. 如何求对角矩阵的逆?