正题


大意

一个序列,每次将一个单调下降的区间翻转,求最少次数将这个序列变成单调上升。


解题思路

考虑将O(n2)O(n2)O(n^2)的暴力转换。
我们先将开始时单调下降的区间翻转,然后我们会发现只有每个区间的边界才会需要交换,因为每个区间已经是单调上升的了。但是每次交换又可能会出现新的需要交换的,这就很像冒泡排序。而冒泡排序需要交换的次数就是逆序对的个数。


代码

#include<cstdio>
#include<algorithm>
long long h[100001],b[100001],n,s,ls,w;
void swap(long long &x,long long &y)
{long long z=x;x=y;y=z;
}
void mage(long long low,long long mid,long long hig)//归并排序求逆序对
{long long p1=low,g=low;long long p2=mid+1;while (g<=hig){if (p1>mid) {b[g]=h[p2]; p2++;}else if (p2>hig) {b[g]=h[p1]; p1++;}else if (h[p1]>h[p2]) {b[g]=h[p1]; p1++; s+=hig-p2+1;}else {b[g]=h[p2]; p2++;}g++;}for (long long i=low;i<=hig;i++) h[i]=b[i];
}
void magesort(long long low,long long hig)
{if (low<hig){long long mid=(low+hig)/2;magesort(low,mid);magesort(mid+1,hig);mage(low,mid,hig);}
}
int main()
{scanf("%d",&n);for (long long i=1;i<=n;i++){scanf("%d",&h[i]);}ls=1;h[n+1]=2147483647;for (long long i=1;i<=n;i++)//第一次交换{if (h[i+1]>h[i]){w=(ls+i)/2;for (long long j=ls;j<=w;j++)swap(h[j],h[i-j+ls]);if (i-ls!=0) s++;ls=i+1;}}magesort(1,n);printf("%d",s);
}

休息!休息一下!

jzoj3462-休息【归并排序,逆序对】相关推荐

  1. 鬼脚图 计蒜客17353 NOIP模拟 归并排序逆序对

    题面在最下方. 本题观察后可以发现,当两个竖线遇到横线的时候,两个竖线所代表的数字会交换位置 所以对于一根链接<x,x+1>的横线,swap(a[x],a[x+1])即可.这个是第一问 对 ...

  2. 洛谷P1966 火柴排队(cdq分治 + 逆序对)

    2020.6.8 练二分了当然要练练分治,这些基础的处理手段真的还是蛮好用的. 这道题是问ai 和bi的平方和最小,最少需要的相邻的交换次数.手动模拟了一下感觉没什么思路.但是后来注意到每次只能移动相 ...

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

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

  4. 【hihocoder】三十九周:二分.归并排序之逆序对

    就是用归并排序求数组中得逆序对.假设数组为a:[2 4 5],和b:[1 3],那么在这一次归并的时候逆序对这样求,belement表示当前result数组中b数组对应的元素个数,total表示逆序对 ...

  5. 泛 归并排序 及 逆序对

    今天写一个归并排序的模板,返回值为该序列的逆序对数 基本思路 归并排序就是利用二分的思想,将区间无限递归二分,直到当前划分区间只包含一个元素或没有元素的时候(我们认为这个序列是自动有序的),我们回溯到 ...

  6. python 归并排序,合并有序数组,逆序对个数

    归并排序,合并有序列表,求逆序对个数 之所以将标题中三者放一起是因为它们有密不可分的关系. 合并有序列表 定义一个空列表 li 用来存放排序后的值; 定义两个 cursor lc 和 rc,分别指向左 ...

  7. POJ-排序-归并排序与逆序对

    排序:归并排序与逆序对 一.概念 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用.将已有序的子序 ...

  8. hust1347(归并排序求逆序对)

    题意: 给出一个数列,你要对这个数列的数字进行k次交换操作,使得交换之后的数列逆序对虽少. 思路: 求原数列的逆序对,再和k比就行了.求逆序对要用归并排序,因为树状数组开不下. 代码: #includ ...

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

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

最新文章

  1. Android常用控件之Fragment仿Android4.0设置界面
  2. Ensure that you have installed a JDK (not just a JRE) and configured your JAVA_HOME system variable
  3. python难嘛-为什么说python入门很简单,但是在你这很难?
  4. Graph Destruction 并查集,图论(500)
  5. android服务应用场景,Android Service的使用介绍
  6. 30多年程序员生涯经验总结(成功源自于失败中的学习;失败则是因为容忍错误的横行)...
  7. 基于node.js+MongoDB+elementui的分页功能更新优化
  8. a标签传值到另一个页面_前端开发入门——HTML基础标签
  9. mysql执行的list_CMD如何进入Mysql命令并执行相关查询
  10. 实时检索系统Zoie实现分析
  11. 最新麦子学院33GWeb前端+Web前端开发从入门到精通完整版
  12. 信息安全密码学期末复习重点总结
  13. 【问题篇】Springboot解决报错“java.sql.SQLException: Unable to load authentication plugin ‘caching_sha2_passw”
  14. 2022汽车驾驶员(初级)考试模拟100题及模拟考试
  15. 从爆红到凉凉,「蚂蚁呀嘿」只用了 7 天
  16. 第二章第二十二题(金融应用:货币单位)(Financial application: monetary units)
  17. 利用Solidworks Motion将带有质量信息和关节约束的三维模型导入ADAMS
  18. 次世代3D游戏角色模型制作:低模制作(三)
  19. Lua Profiler 工具(基于PepperfishProfiler 修改)
  20. 关于WMV格式文件的解析

热门文章

  1. oracle经常开关好吗,频繁开关机对电脑有什么影响吗?
  2. python123动物重量排序_Python爬虫图片学习(一)
  3. c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
  4. linux删除第二次出现的字符,linux下 怎样删除文件名中包含特殊字符的文件
  5. c语言字符串中取最大字符串,使用C语言提取子字符串及判断对称子字符串最大长度...
  6. leetcode383. 赎金信(两种做法)
  7. C++ 学习之旅(6)——循环loop
  8. [蓝桥杯2015决赛]密文搜索
  9. 数据结构与算法--二叉查找树转顺序排列双向链表
  10. nginx php iconv,Nginx +PHP部署一