【HDOJ】1394 Minimum Inversion Number
逆序数的性质。
1. 暴力解
#include <stdio.h>
#define MAXNUM 5005
int a[MAXNUM];
int main() {
int n;
int i, j, sum, min;
while (scanf("%d", &n) != EOF) {
for (i=; i<n; ++i)
scanf("%d", &a[i]);
sum = ;
for (i=; i<n; ++i) {
for (j=i+; j<n; ++j)
if (a[j] < a[i])
++sum;
}
min = sum;
for (i=; i<n; ++i) {
sum += n - - a[i]*;
if (sum < min)
min = sum;
//printf("%d\n", sum);
}
printf("%d\n", min);
}
return ;
}
2. 线段树。需要理解如何求逆序数。
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; #define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1 const int maxn = ; int nums[maxn<<];
int a[maxn]; void PushUP(int rt) {
nums[rt] = nums[rt<<] + nums[rt<<|];
} void build(int l, int r, int rt) {
nums[rt] = ;
if (l == r) return;
int m = (l+r)>>;
build(lson);
build(rson);
} void update(int p, int l, int r, int rt) {
if (l == r) {
nums[rt] = ;
return ;
}
int m = (l+r)>>;
if (p <= m)
update(p, lson);
else
update(p, rson);
PushUP(rt);
} int query(int ll, int rr, int l, int r, int rt) {
if (ll<=l && rr>=r) {
return nums[rt];
}
int m = (l+r)>>;
int ret = ;
if (ll <= m)
ret += query(ll, rr, lson);
if (rr > m)
ret += query(ll, rr, rson); return ret;
} int main() {
int n;
int i, sum, min; while (scanf("%d", &n) != EOF) {
build(, n-, );
sum = ;
for (i=; i<n; ++i) {
scanf("%d", &a[i]);
sum += query(a[i], n-, , n-, );
update(a[i], , n-, );
//printf("%d: sum=%d\n", i, sum);
}
min = sum;
for (i=; i<n; ++i) {
sum += n - - a[i]*;
if (sum < min)
min = sum;
}
printf("%d\n", min);
} return ;
}
【HDOJ】1394 Minimum Inversion Number的更多相关文章
- 逆序数2 HDOJ 1394 Minimum Inversion Number
题目传送门 /* 求逆序数的四种方法 */ /* 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]....t[N] 它的 ...
- HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number ...
- HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)
HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...
- HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)
HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意: 给一个序列由 ...
- HDU 1394——Minimum Inversion Number——————【线段树单点增减、区间求和】
Minimum Inversion Number Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & ...
- HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)
Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...
- HDU 1394 Minimum Inversion Number(最小逆序数 线段树)
Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...
- hdu 1394 Minimum Inversion Number - 树状数组
The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...
- hdu 1394 Minimum Inversion Number 逆序数/树状数组
Minimum Inversion Number Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showprob ...
随机推荐
- VIM中文乱码(_vimrc配置文件备份)
_vimrc在用户目录下: set fileencodings=ucs-bom,utf-,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set encoding=ut ...
- 让IE支持Css3属性(圆角、阴影、渐变)
>>>>>>>>>>>>>>>>>>>>>>>>> ...
- SQL删除重复行和查询所有大于某成绩的语句分析
有这样一个题,用一条SQL语句 查询出每门课都大于80分的学生姓名. 下面是表 分析,查询每门课程都大于80的学生.SELECT DISTINCT name FROM dbo.student WHER ...
- 可扩展多线程异步Socket服务器框架EMTASS 2.0 续
转载自Csdn:http://blog.csdn.net/hulihui/article/details/3158613 (原创文章,转载请注明来源:http://blog.csdn.net/huli ...
- SQL学习:查询的用法(1)
在SQL servre的使用中,查询的用法是最多的.最重要的,也是最难学习的,因此掌握查询的用法很重要. 先将表的示例上图 员工表: 部门表: ...
- Oracle 11g 新特性(一)-- 虚拟列
数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如 ...
- UIAlertController使用的一个坑
/ // 创建一个确定按钮”一定要注意不能在提醒控制器的按钮的点击方法内部用到提醒控制器自己”,不能把下面这句话放在block内部”不然会死循环,导致警告控制器不能销毁" UITextFie ...
- ACM HDU 2674 N! Again(数论)
继续数论.. Problem Description WhereIsHeroFrom: Zty,what are you doing ? Zty: ...
- Leetcode系列-Search in Rotated Sorted Array
做Leetcode题有一段时间了,但都是断断续续的,到现在才做了30题左右,感觉对自己来说还是有点难度的.希望自己能继续坚持下去,在校招前能解决超过一百题吧. 其实这些题就是用来训练你的解题思路的,做 ...
- cmd 窗口的复制粘贴
如下几种方法1.点击鼠标右键,选择标志,再点击左键拖动选择要复制的内容,然后回车即可复制被 选择的内容 2.点击鼠标右键,选择标志,再点击左键拖动选择要复制的内容,然后点击鼠标右键, 此时就把选择的内 ...