逆序数的性质。
1. 暴力解

  1. #include <stdio.h>
  2.  
  3. #define MAXNUM 5005
  4.  
  5. int a[MAXNUM];
  6.  
  7. int main() {
  8. int n;
  9. int i, j, sum, min;
  10.  
  11. while (scanf("%d", &n) != EOF) {
  12. for (i=; i<n; ++i)
  13. scanf("%d", &a[i]);
  14. sum = ;
  15. for (i=; i<n; ++i) {
  16. for (j=i+; j<n; ++j)
  17. if (a[j] < a[i])
  18. ++sum;
  19. }
  20. min = sum;
  21. for (i=; i<n; ++i) {
  22. sum += n - - a[i]*;
  23. if (sum < min)
  24. min = sum;
  25. //printf("%d\n", sum);
  26. }
  27. printf("%d\n", min);
  28. }
  29.  
  30. return ;
  31. }

2. 线段树。需要理解如何求逆序数。

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. #define lson l, m, rt<<1
  7. #define rson m+1, r, rt<<1|1
  8.  
  9. const int maxn = ;
  10.  
  11. int nums[maxn<<];
  12. int a[maxn];
  13.  
  14. void PushUP(int rt) {
  15. nums[rt] = nums[rt<<] + nums[rt<<|];
  16. }
  17.  
  18. void build(int l, int r, int rt) {
  19. nums[rt] = ;
  20. if (l == r) return;
  21. int m = (l+r)>>;
  22. build(lson);
  23. build(rson);
  24. }
  25.  
  26. void update(int p, int l, int r, int rt) {
  27. if (l == r) {
  28. nums[rt] = ;
  29. return ;
  30. }
  31. int m = (l+r)>>;
  32. if (p <= m)
  33. update(p, lson);
  34. else
  35. update(p, rson);
  36. PushUP(rt);
  37. }
  38.  
  39. int query(int ll, int rr, int l, int r, int rt) {
  40. if (ll<=l && rr>=r) {
  41. return nums[rt];
  42. }
  43. int m = (l+r)>>;
  44. int ret = ;
  45. if (ll <= m)
  46. ret += query(ll, rr, lson);
  47. if (rr > m)
  48. ret += query(ll, rr, rson);
  49.  
  50. return ret;
  51. }
  52.  
  53. int main() {
  54. int n;
  55. int i, sum, min;
  56.  
  57. while (scanf("%d", &n) != EOF) {
  58. build(, n-, );
  59. sum = ;
  60. for (i=; i<n; ++i) {
  61. scanf("%d", &a[i]);
  62. sum += query(a[i], n-, , n-, );
  63. update(a[i], , n-, );
  64. //printf("%d: sum=%d\n", i, sum);
  65. }
  66. min = sum;
  67. for (i=; i<n; ++i) {
  68. sum += n - - a[i]*;
  69. if (sum < min)
  70. min = sum;
  71. }
  72. printf("%d\n", min);
  73. }
  74.  
  75. return ;
  76. }

【HDOJ】1394 Minimum Inversion Number的更多相关文章

  1. 逆序数2 HDOJ 1394 Minimum Inversion Number

    题目传送门 /* 求逆序数的四种方法 */ /* 1. O(n^2) 暴力+递推 法:如果求出第一种情况的逆序列,其他的可以通过递推来搞出来,一开始是t[1],t[2],t[3]....t[N] 它的 ...

  2. HDU 1394 Minimum Inversion Number ( 树状数组求逆序数 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1394 Minimum Inversion Number                         ...

  3. HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对)

    HDU.1394 Minimum Inversion Number (线段树 单点更新 区间求和 逆序对) 题意分析 给出n个数的序列,a1,a2,a3--an,ai∈[0,n-1],求环序列中逆序对 ...

  4. HDU 1394 Minimum Inversion Number(线段树求最小逆序数对)

    HDU 1394 Minimum Inversion Number(线段树求最小逆序数对) ACM 题目地址:HDU 1394 Minimum Inversion Number 题意:  给一个序列由 ...

  5. HDU 1394——Minimum Inversion Number——————【线段树单点增减、区间求和】

    Minimum Inversion Number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & ...

  6. HDU 1394 Minimum Inversion Number(线段树/树状数组求逆序数)

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  7. HDU 1394 Minimum Inversion Number(最小逆序数 线段树)

    Minimum Inversion Number [题目链接]Minimum Inversion Number [题目类型]最小逆序数 线段树 &题意: 求一个数列经过n次变换得到的数列其中的 ...

  8. hdu 1394 Minimum Inversion Number - 树状数组

    The inversion number of a given number sequence a1, a2, ..., an is the number of pairs (ai, aj) that ...

  9. hdu 1394 Minimum Inversion Number 逆序数/树状数组

    Minimum Inversion Number Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showprob ...

随机推荐

  1. VS2015+TFS2015源代码管理

    使用Visual Studio连接TFS

  2. ASP.NET分页存储过程,解决搜索时丢失条件信息

    存储过程: -- ============================================= -- Author: -- Create date: -- Description: 分页 ...

  3. MYSQL之高级查询

    PHP高级查询 分组查询.联合查询.连接查询.子查询 版权声明:本文为博主原创文章,未经博主允许不得转载.

  4. C#设置与获取目录权限(.net控制ACL)

    找到两种方式可以修改文件夹的权限 第一种: 想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果.终于发现了一段vb.net的代码,做了修改,以C#展示给大家. using System; ...

  5. Chart图形 [GDI+] OWCChart统计图的封装类 (转载)

    点击下载 OWCChart.zip 利用OWC11进行作统计图的封装类. /// <summary> /// 类说明:进行作统计图的封装类 /// 联系方式:361983679 /// 更 ...

  6. android下面res目录

    1. 相关文件夹介绍      在Android项目文件夹里面,主要的资源文件是放在res文件夹里面的.assets文件夹是存放不进行编译加工的原生文件,即该文件夹里面的文件不会像xml,java文件 ...

  7. Jsp内置对象-session

    session内置对象介绍 个人理解:session因为是唯一的, session是与请求有关的会话期,它是java.servlet.http.HttpSession类的对象,用来表示和存储当前页面的 ...

  8. 在mipsel-linux平台上的编译应用SQLite-3.5.9

    sqlite 第一个Alpha版本诞生于2000年5月,是实现了SQL 92标准的一个大子集的嵌入式数据库,其以在一个库中组合了数据库引擎和接口,能将所有数据存储于单个文件中.官方测试表明sqlite ...

  9. 使用Newtonsoft.Json序列化和反序列化对象(源码)

    Json数据格式,简单而强大. 使用Json,不得不提到Newtonsoft.Json,它帮助我们更方便的使用Json,当然,不使用它也是可以的,还有许多方法将对象序列化成Json字符串,暂且不提. ...

  10. 查看oracle 启动了多久

    想看一下系统正常运行了多少天?开机多长时间没有重启了? windows系统 C:\>systeminfo |find “系统启动时间”系统启动时间:     265 天 4 小时 26 分 32 ...