【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 ...
随机推荐
- C#面向对象(二)
一:抽象方法 1. 在面向对象编程语言中抽象方法指一些只有方法声明,而没有具体方法体的方法.抽象方法一般存在于抽象类或接口中. 在一些父类中,某些行为不是非常明确,因此无法用代码来具体实现,但是类还必 ...
- SQL Server 游标
结果集,结果集就是select查询之后返回的所有行数据的集合. 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行. 正常面向集合的思维方式是: 而 ...
- 用Javascript评估用户输入密码的强度
<!-- 密码已经是我们生活工作中必不可少的工具,但一个不安全的密码有又有可能会给我们造成不必要的损失.作为网站设计者,如果我们在网页中能对用户输入的密码进行安全评估,并显示出相应的提示信息 ...
- jQuery获取radio选中项的值【转藏】
<title></title> <script src="js/jquery-1.7.2.min.js"></script> < ...
- [图文]centos6.3搭建FTP服务器教程
我一开始是参照这个教程做的 http://www.linuxren.net/better/centos63-ftp.html 可是问题总是免不了的,我遇到几个问题. 一开始使用terminal的时候一 ...
- A题笔记(1)
#include <stdlib.h> exit(); #include <stdlib.h> 是 exit(0) 必须的头文件 否则会出现 exit was not decl ...
- SQL Server中Id自增列的最大Id是多少
什么是自增列 在SQL Server中可以将Id列设为自增.即无需为Id指定值,由SQL Server自动给该列赋值,每新增一列Id的值加一,初始值为1. 需要注意的是即使将原先添加的所有数据都删除, ...
- PHP程序开发人员要掌握的知识
文件目录处理函数包80%以上的函数的功能的灵活运用. 日期时间函数中的80%以上的函数的功能的灵活运用 数学函数库中的100%的内容. 网络库中的60%以上的内容,对各个函数的功能比较熟悉. 字符串处 ...
- 过滤HTML
过滤HTML public static string NoHTML(string html){ string[] strArray2 = new string[] { "font" ...
- js 保留小数位数
eg: var num=3.1415926 小数位处理:num.toFixed(n) n:小数位数