【POJ1804】Brainman 【求逆序数】
题意:
给你一串序列,每次只能交换序列中相邻的数字,问最少需要操作几次能将序列变成有序的。
思路:
本题从逆序对出发思考,可以发现,交换一对相邻数字最多只能减少一对逆序对。
因此不难想到,本题的最少操作数就是所有逆序对个数。
此类问题还有很多,比如取区间中的一段连续数字插入数列中任意位置,需要多少次可以让数列变成有序数列。
此时就需要考虑每一次插入,最多可以改变几个数字的后继,和本题也是一样的思考方式。
代码:
#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 【求逆序数】相关推荐
- hdu 1394(树状数组求逆序数)
解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...
- nyoj117求逆序数 并归排序法
题目链接:http://115.159.40.116/problem_show.php?pid=4729 或者:http://acm.nyist.net/JudgeOnline/problem.php ...
- NYOJ 117 求逆序数
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序 ...
- 【归并排序】-求逆序数算法
1.归并排序 归并排序是分治法的一种典型应用,应用递归思想,自顶向下思考:先假定MergeSort()可以将一个乱序数组排好序,因此可以开始分(将一个数组平均分成两部分),再治(分别调用MergeSo ...
- 离散化+树状数组求逆序数
题目:http://poj.org/problem?id=2299 离散化是一种常用的技巧,有时数据范围太大,可以用来放缩到我们能处理的范围 因为其中需排序的数的范围0--- 999999999:显然 ...
- 高级排序求逆序数之分治法
前面几篇文章都有讲分治法,分而治之,一种很典型的算法思想,现在求逆序数,如果是你初次接触,一般都会想到冒泡法来统计逆序数.不过冒泡法的时间复杂度确实高(n²),所以接下来运用分治法来实现,复杂度为(n ...
- hdu 2838求逆序数开了两个数组
http://acm.hdu.edu.cn/showproblem.php?pid=2838 Cow Sorting Time Limit: 2000/1000 MS (Java/Others) ...
- 求逆序数-第12届蓝桥杯Scratch省赛3真题第3题
[导读]:超平老师计划推出Scratch蓝桥杯真题解析100讲,这是超平老师解读Scratch蓝桥真题系列的第43讲. 第12届蓝桥杯青少年组省赛分两次进行,这是2021年4月24日举行的第二次省赛考 ...
- matlab求逆序数
matlab求逆序数 逆序数概念: 因为没时间详细介绍逆序数概念,上传图片仅作参考. 逆序数matlab代码: clc clear %author:猪猪侠 %date:2018-7-18 x=inpu ...
- C语言实现逆序数线性代数,线性代数之求逆序数
线性代数之求逆序数 在线性代数中,经常要求序列的逆序数,即所有逆序之和.在一个排列中若较大的数字排在较小数字的左边,则成这两个数字构成一个逆序.求解过程用C语言描述如下: #define N 5 in ...
最新文章
- 中国人民大学_《组织行为学》_11怎样招到最合适的人
- hdu 2136 筛法求素数
- 入门 | 机器学习第一课:决策树学习概述与实现
- IntelliJ IDEA for Mac 中 Java Web Project 默认的工件(Artifacts)输出目录
- 函数计算助力语雀构建稳定且安全的业务架构
- f5+big+client+android,F5负载均衡 MIBs bigip oid
- 层内容被FLASH遮挡解决办法
- (17)Node.js第三方模块
- 计算机考试网站配置参数错误,计算机模拟考试系统_安装计算机考试模拟系统显示“数据库连接错误请联系管理员”是怎么回事...
- GitBash和GitGui右键失效解决方法
- Alibaba珍藏版mybatis手写文档,值得一读!
- DDPM代码详细解读(1):数据集准备、超参数设置、loss设计、关键参数计算
- 力扣437(前缀和解法)
- 批处理图片尺寸修改成4的倍数
- java bouncycastle_BouncyCastle
- workbench动力学周炬_《ANSYS WORKBENCH有限元分析实例详解(动力学)》【价格 目录 书评 正版】_中国图书网...
- Cyclen-PEG-Bodipy;大环配体-聚乙二醇-氟化硼二吡咯;大环配体-PEG-Bodipy
- html360搜索框代码,HTML 代码标签
- 计算机键盘输入法基础知识,电脑打字入门基础知识
- 监听器(统计在线人数)
热门文章
- freemarker 自己常用方法
- 如何对系统日志中事件 ID 9、事件 ID 11 和事件 ID 15 错误消息进行故障排除
- 使用fastcgi_cache加速你的Nginx网站
- Scikit-Learn (1.Sklearn提供的常用数据集 - 自带的小数据集)
- php单入口路由设计,php 简单路由实现
- 增量式pid调节方式有何优点_PID控制在变频器驱动系统中的应用
- 【UVA524】Prime Ring Problem(素数环--递归回溯+全局变量的一个小坑点---水题)
- hdoj1290切球形蛋糕(递推和划分问题)
- 计算机科学与技术的班会,计算机科学与技术学院2014级信管三班班会
- mysql数据库文件结构同步,[数据库的表同步mysql]MySQL表结构同步