【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 ...
最新文章
- 我的C++学习历程(old)
- 谈一谈 MPU6050 姿态融合(转)
- python可以做运动控制卡吗_今天,终于明白了运动控制器和运动控制卡的区别
- Windows 系统下使用 MinGW + MSYS + GCC 编译 FFMPEG
- java程序员应该掌握的技术才算得上熟练Java开发
- SelectSort 选择排序
- 让效率“爆表”的49个数据可视化工具
- Android 电容屏驱动
- matlab第六章课后答案,第六章习题及答案
- circPrimer:环状RNA注释和引物设计工具
- 通州区机器人比赛活动总结_机器人科技活动总结.doc
- python手机代码编辑器_Pycharm(Python代码编辑器) V2020.1.2 官方版
- 计算机组装与维护选教材,计算机组装与维护校本教材.doc
- 现在PayPal还可以怎样提现???账户只有91刀!
- 哇!大开脑洞!“绿协杯”东莞市第六届绿色建筑设计比赛【往期获奖作品回顾上篇】
- 第12课:生活中的构建模式——想要车还是庄园
- C语言基础级——N维数组定义与使用
- 我参加NVIDIA Sky Hackathon 训练文件的路径设置
- 一个电脑接两个显示器(win10)
- ppt中加入html,如何在ppt中插入html网页.ppt
热门文章
- flash 绘图API:绘制秀曲线图形
- 南阳oj-----汉诺塔(三)(stack)
- JavaWeb的环境配置
- android runtime异常,在做android下拉刷新时遇到异常java.lang.RuntimeException: Can't create handle...
- Django的数据迁移
- 湘潭大学计算机考研调剂,2017年湘潭大学硕士研究生调剂信息公告
- 叛乱联机服务器未响应,叛乱沙漠风暴开服注意事项及操作指南经验一览
- C/C++[codeup 2066]分组统计
- 翻译: swift5 iOS中的自动布局教程:Auto Layout入门
- 翻译: Python range 函数指南 -- 从入门到精通