题意:

给你一串序列,每次只能交换序列中相邻的数字,问最少需要操作几次能将序列变成有序的。

思路:

本题从逆序对出发思考,可以发现,交换一对相邻数字最多只能减少一对逆序对。

因此不难想到,本题的最少操作数就是所有逆序对个数。

此类问题还有很多,比如取区间中的一段连续数字插入数列中任意位置,需要多少次可以让数列变成有序数列。

此时就需要考虑每一次插入,最多可以改变几个数字的后继,和本题也是一样的思考方式。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#define rep(i,a,b) for(int i = a;i <= b;i++)
using namespace std;
const int N = 1500;int a[N],cnt,tmp[N];void Merge(int l,int mid,int r)
{//合并a[l-mid]与a[mid+1-r]int i = l, j = mid+1;rep(k,l,r)if(j > r || (i <= mid && a[i] <= a[j])) tmp[k] = a[i++];   //此处是<还是<=,取决于题意,即5,5是否算一对逆序对else tmp[k] = a[j++], cnt += mid-i+1;rep(k,l,r) a[k] = tmp[k];
}void Mergesort(int l,int r)
{if(l < r){int mid = (l+r)>>1;Mergesort(l,mid);Mergesort(mid+1,r);Merge(l,mid,r);}
}int main()
{int T;scanf("%d",&T);rep(cas,1,T){cnt = 0;int n;scanf("%d",&n);rep(i,1,n)scanf("%d",&a[i]);Mergesort(1,n);printf("Scenario #%d:\n%d\n\n",cas,cnt);}return 0;
}

【POJ1804】Brainman 【求逆序数】相关推荐

  1. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

  2. nyoj117求逆序数 并归排序法

    题目链接:http://115.159.40.116/problem_show.php?pid=4729 或者:http://acm.nyist.net/JudgeOnline/problem.php ...

  3. NYOJ 117 求逆序数

    求逆序数 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序 ...

  4. 【归并排序】-求逆序数算法

    1.归并排序 归并排序是分治法的一种典型应用,应用递归思想,自顶向下思考:先假定MergeSort()可以将一个乱序数组排好序,因此可以开始分(将一个数组平均分成两部分),再治(分别调用MergeSo ...

  5. 离散化+树状数组求逆序数

    题目:http://poj.org/problem?id=2299 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0--- 999999999:显然 ...

  6. 高级排序求逆序数之分治法

    前面几篇文章都有讲分治法,分而治之,一种很典型的算法思想,现在求逆序数,如果是你初次接触,一般都会想到冒泡法来统计逆序数.不过冒泡法的时间复杂度确实高(n²),所以接下来运用分治法来实现,复杂度为(n ...

  7. hdu 2838求逆序数开了两个数组

    http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Time Limit: 2000/1000 MS (Java/Others)    ...

  8. 求逆序数-第12届蓝桥杯Scratch省赛3真题第3题

    [导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第43讲. 第12届蓝桥杯青少年组省赛分两次进行,这是2021年4月24日举行的第二次省赛考 ...

  9. matlab求逆序数

    matlab求逆序数 逆序数概念: 因为没时间详细介绍逆序数概念,上传图片仅作参考. 逆序数matlab代码: clc clear %author:猪猪侠 %date:2018-7-18 x=inpu ...

  10. C语言实现逆序数线性代数,线性代数之求逆序数

    线性代数之求逆序数 在线性代数中,经常要求序列的逆序数,即所有逆序之和.在一个排列中若较大的数字排在较小数字的左边,则成这两个数字构成一个逆序.求解过程用C语言描述如下: #define N 5 in ...

最新文章

  1. 我的C++学习历程(old)
  2. 谈一谈 MPU6050 姿态融合(转)
  3. python可以做运动控制卡吗_今天,终于明白了运动控制器和运动控制卡的区别
  4. Windows 系统下使用 MinGW + MSYS + GCC 编译 FFMPEG
  5. java程序员应该掌握的技术才算得上熟练Java开发
  6. SelectSort 选择排序
  7. 让效率“爆表”的49个数据可视化工具
  8. Android 电容屏驱动
  9. matlab第六章课后答案,第六章习题及答案
  10. circPrimer:环状RNA注释和引物设计工具
  11. 通州区机器人比赛活动总结_机器人科技活动总结.doc
  12. python手机代码编辑器_Pycharm(Python代码编辑器) V2020.1.2 官方版
  13. 计算机组装与维护选教材,计算机组装与维护校本教材.doc
  14. 现在PayPal还可以怎样提现???账户只有91刀!
  15. 哇!大开脑洞!“绿协杯”东莞市第六届绿色建筑设计比赛【往期获奖作品回顾上篇】
  16. 第12课:生活中的构建模式——想要车还是庄园
  17. C语言基础级——N维数组定义与使用
  18. 我参加NVIDIA Sky Hackathon 训练文件的路径设置
  19. 一个电脑接两个显示器(win10)
  20. ppt中加入html,如何在ppt中插入html网页.ppt

热门文章

  1. flash 绘图API:绘制秀曲线图形
  2. 南阳oj-----汉诺塔(三)(stack)
  3. JavaWeb的环境配置
  4. android runtime异常,在做android下拉刷新时遇到异常java.lang.RuntimeException: Can't create handle...
  5. Django的数据迁移
  6. 湘潭大学计算机考研调剂,2017年湘潭大学硕士研究生调剂信息公告
  7. 叛乱联机服务器未响应,叛乱沙漠风暴开服注意事项及操作指南经验一览
  8. C/C++[codeup 2066]分组统计
  9. 翻译: swift5 iOS中的自动布局教程:Auto Layout入门
  10. 翻译: Python range 函数指南 -- 从入门到精通