题意:

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

思路:

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

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

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

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

代码:

#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. 中国人民大学_《组织行为学》_11怎样招到最合适的人
  2. hdu 2136 筛法求素数
  3. 入门 | 机器学习第一课:决策树学习概述与实现
  4. IntelliJ IDEA for Mac 中 Java Web Project 默认的工件(Artifacts)输出目录
  5. 函数计算助力语雀构建稳定且安全的业务架构
  6. f5+big+client+android,F5负载均衡 MIBs bigip oid
  7. 层内容被FLASH遮挡解决办法
  8. (17)Node.js第三方模块
  9. 计算机考试网站配置参数错误,计算机模拟考试系统_安装计算机考试模拟系统显示“数据库连接错误请联系管理员”是怎么回事...
  10. GitBash和GitGui右键失效解决方法
  11. Alibaba珍藏版mybatis手写文档,值得一读!
  12. DDPM代码详细解读(1):数据集准备、超参数设置、loss设计、关键参数计算
  13. 力扣437(前缀和解法)
  14. 批处理图片尺寸修改成4的倍数
  15. java bouncycastle_BouncyCastle
  16. workbench动力学周炬_《ANSYS WORKBENCH有限元分析实例详解(动力学)》【价格 目录 书评 正版】_中国图书网...
  17. Cyclen-PEG-Bodipy;大环配体-聚乙二醇-氟化硼二吡咯;大环配体-PEG-Bodipy
  18. html360搜索框代码,HTML 代码标签
  19. 计算机键盘输入法基础知识,电脑打字入门基础知识
  20. 监听器(统计在线人数)

热门文章

  1. freemarker 自己常用方法
  2. 如何对系统日志中事件 ID 9、事件 ID 11 和事件 ID 15 错误消息进行故障排除
  3. 使用fastcgi_cache加速你的Nginx网站
  4. Scikit-Learn (1.Sklearn提供的常用数据集 - 自带的小数据集)
  5. php单入口路由设计,php 简单路由实现
  6. 增量式pid调节方式有何优点_PID控制在变频器驱动系统中的应用
  7. 【UVA524】Prime Ring Problem(素数环--递归回溯+全局变量的一个小坑点---水题)
  8. hdoj1290切球形蛋糕(递推和划分问题)
  9. 计算机科学与技术的班会,计算机科学与技术学院2014级信管三班班会
  10. mysql数据库文件结构同步,[数据库的表同步mysql]MySQL表结构同步