冒泡排序中 如果一个数的后面的某个数和这个数不符合排序规则 那么这个数就会在未来的某次冒泡中与那个数进行交换

这里用到了 树状数组求逆序数的办法来做 需要注意的是2028并不可以改完数组大小后直接套1526代码 因为会超出int的范围

树状数组求逆序对的耗时要比归并排序长一些 不过简单..

之所以要记录下来这道题是因为在其中并没有说 每一个数都是独一无二的 那么当我们离散化的时候就需要做出一些小的调整

1526

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<map>
  5. #include<math.h>
  6. #include<iostream>
  7. #include<stack>
  8. #include<vector>
  9. using namespace std;
  10. int c[5050];
  11. int n;
  12. struct node
  13. {
  14. int id;
  15. int val;
  16. };
  17. node a[5050];
  18. int cmp1(node a,node b)
  19. {
  20. return a.val<b.val;
  21. }
  22. int cmp2(node a,node b)
  23. {
  24. return a.id<b.id;
  25. }
  26. void lsh(){
  27. sort(a+1,a+1+n,cmp1);
  28. a[0].val=0;
  29. for(int i=1;i<=n;i++)
  30. {
  31. int j=i;
  32. while(a[j].val==a[i].val&&j<=n)
  33. {
  34. j++;
  35. }
  36. for(int k=i;k<j;k++)
  37. {
  38. a[k].val=i;
  39. }
  40. i=j-1;
  41. }
  42. sort(a+1,a+1+n,cmp2);
  43. }
  44. int lowbit(int i)
  45. {
  46. return i&(-i);
  47. }
  48. void add(int x)
  49. {
  50. for(int i=x;i<=n;i+=lowbit(i))
  51. {
  52. c[i]+=1;
  53. }
  54. }
  55. int sum(int x)
  56. {
  57. int s=0;
  58. for(int i=x;i>=1;i-=lowbit(i))
  59. {
  60. s+=c[i];
  61. }
  62. return s;
  63. }
  64. int main(){
  65. while(cin>>n)
  66. {
  67. for(int i=1;i<=n;i++)
  68. {
  69. a[i].id=i;
  70. cin>>a[i].val;
  71. }
  72. lsh();
  73. memset(c,0,sizeof(c));
  74. int ans=0;
  75. for(int i=n;i>=1;i--)
  76. {
  77. int z=sum(a[i].val-1);
  78. ans+=z;
  79. add(a[i].val);
  80. }
  81. if(ans>1000000)
  82. printf("xiaohouTLE!\n");
  83. else
  84. {
  85. printf("xiaohouV5!\n");
  86. }
  87. }
  88. }

2028

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<map>
  5. #include<math.h>
  6. #include<iostream>
  7. #include<stack>
  8. #include<vector>
  9. using namespace std;
  10. long long c[500050];
  11. long long n;
  12. struct node
  13. {
  14. long long id;
  15. long long val;
  16. };
  17. node a[500050];
  18. long long cmp1(node a,node b)
  19. {
  20. return a.val<b.val;
  21. }
  22. long long cmp2(node a,node b)
  23. {
  24. return a.id<b.id;
  25. }
  26. void lsh(){
  27. sort(a+1,a+1+n,cmp1);
  28. a[0].val=0;
  29. for(long long i=1;i<=n;i++)
  30. {
  31. long long j=i;
  32. while(a[j].val==a[i].val&&j<=n)
  33. {
  34. j++;
  35. }
  36. for(long long k=i;k<j;k++)
  37. {
  38. a[k].val=i;
  39. }
  40. i=j-1;
  41. }
  42. sort(a+1,a+1+n,cmp2);
  43. }
  44. long long lowbit(long long i)
  45. {
  46. return i&(-i);
  47. }
  48. void add(long long x)
  49. {
  50. for(long long i=x;i<=n;i+=lowbit(i))
  51. {
  52. c[i]+=1;
  53. }
  54. }
  55. long long sum(long long x)
  56. {
  57. long long s=0;
  58. for(long long i=x;i>=1;i-=lowbit(i))
  59. {
  60. s+=c[i];
  61. }
  62. return s;
  63. }
  64. int main(){
  65. while(cin>>n)
  66. {
  67. if(!n)
  68. break;
  69. for(long long i=1;i<=n;i++)
  70. {
  71. a[i].id=i;
  72. cin>>a[i].val;
  73. }
  74. lsh();
  75. memset(c,0,sizeof(c));
  76. long long ans=0;
  77. for(long long i=n;i>=1;i--)
  78. {
  79. long long z=sum(a[i].val-1);
  80. ans+=z;
  81. add(a[i].val);
  82. }
  83. cout<<ans<<endl;
  84. }
  85. }

  

hrbust oj 1526+2028 树状数组的更多相关文章

  1. FZU oj 2277 Change 树状数组+dfs序

    Problem 2277 Change Time Limit: 2000 mSec    Memory Limit : 262144 KB  Problem Description There is ...

  2. uestc oj 1217 The Battle of Chibi (dp + 离散化 + 树状数组)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 给你一个长为n的数组,问你有多少个长度严格为m的上升子序列. dp[i][j]表示以a[i]结尾长为j ...

  3. Libre OJ 130、131、132 (树状数组 单点修改、区间查询 -> 区间修改,单点查询 -> 区间修改,区间查询)

    这三题均可以用树状数组.分块或线段树来做 #130. 树状数组 1 :单点修改,区间查询 题目链接:https://loj.ac/problem/130 题目描述 这是一道模板题. 给定数列 a[1] ...

  4. hrbust 1840 (树状数组第k大) 删点使用

    小橙子 Time Limit: 2000 MS Memory Limit: 32768 K Total Submit: 2(2 users) Total Accepted: 1(1 users) Ra ...

  5. 玲珑学院OJ 1023 - Magic boy Bi Luo with his excited math problem 树状数组暴力

    分析:a^b+2(a&b)=a+b  so->a^(-b)+2(a&(-b))=a-b 然后树状数组分类讨论即可 链接:http://www.ifrog.cc/acm/probl ...

  6. Comet OJ - Contest #14 转转的数据结构题 珂朵莉树+树状数组

    题目链接: 题意:有两个操作 操作1:给出n个操作,将区间为l到r的数字改为x 操作2:给出q个操作,输出进行了操作1中的第x到x+y-1操作后的结果 解法: 把询问离线,按照r从小到大排序 每次询问 ...

  7. XJTUOJ wmq的队伍(树状数组求 K 元逆序对)

    题目链接:http://oj.xjtuacm.com/problem/14/[分析]二元的逆序对应该都会求,可以用树状数组.这个题要求K元,我们可以看成二元的.我们先从后往前求二元逆序对数, 然后对于 ...

  8. ACM学习历程—SNNUOJ 1239 Counting Star Time(树状数组 && 动态规划 && 数论)

    http://219.244.176.199/JudgeOnline/problem.php?id=1239 这是这次陕西省赛的G题,题目大意是一个n*n的点阵,点坐标从(1, 1)到(n, n),每 ...

  9. 【Hihocoder1034】毁灭者问题(splay,树状数组)

    题意: 假设你拥有 n 个魔法单位,他们从左到有站在一行,编号从 1 到 n. 每个单位拥有三项属性: si: 初始法力. mi: 最大法力上限. ri: 每秒中法力回复速度. 现在你操纵一个毁灭者, ...

随机推荐

  1. ASP.Net核心对象HttpRequest

    描述context. Request["username"]; 通过这种方式,能够得到一个HttpRequest对象.HttpRequest对象描述了,关于请求的相关信息,我们可以 ...

  2. 谈谈Objective-C的警告 (转)

    原文地址:http://onevcat.com/2013/05/talk-about-warning/ 一个有节操的程序员会在乎自己的代码的警告,就像在乎饭碗边上有只死蟑螂那样. ——@onevcat ...

  3. show processlist

    mysql> show processlist; #mysql服务器查看有那些主机连进来,并列出它们查什么库 +-----+------+-----------+------+--------- ...

  4. 总结sqlserver数据库性能优化相关的注意事项

    一.分析阶段一般来说,在系统分析阶段往往有太多需要关注的地方,系统各种功能性.可用性.可靠性.安全性需求往往吸引了我们大部分的注意力,但是,我们必须注意,性能是很重要的非功能性需求,必须根据系统的特点 ...

  5. OpenStack Keystone安装部署流程

    之前介绍了OpenStack Swift的安装部署,采用的都是tempauth认证模式,今天就来介绍一个新的组件,名为Keystone. 1. 简介 本文将详细描述Keystone的安装部署流程,并给 ...

  6. 在Linux中创建静态库.a和动态库.so

    转自:http://www.cnblogs.com/laojie4321/archive/2012/03/28/2421056.html 在Linux中创建静态库.a和动态库.so 我们通常把一些公用 ...

  7. mysql中char与varchar的区别分析(补充一句,int和integer没区别)

    转自:http://www.jb51.net/article/23575.htm 在mysql教程中char与varchar的区别呢,都是用来存储字符串的,只是他们的保存方式不一样罢了,char有固定 ...

  8. JeeWx 微信管家平台

    .平台简介 Jeewx是一款开源.免费的微信管家系统(多触点管理平台),2014年荣获CSDN开发商大会第一名.采用JAVA语言,支持微信公众号.微信企业号.支付宝服务窗等多触点管理.Jeewx实现了 ...

  9. img 默认是行内元素,它旁边的空格是会保留的

    img 默认是行内元素,它旁边的空格是会保留的.因此图片宽度设置百分百后下面会有点找不出原因的间隙. 解决办法:img{display:block}

  10. Memcached GUI工具

    1, http://www.junopen.com/memadmin/   或 https://github.com/junstor/memadmin 帐号和密码都是:admin 在左下的数据读取里面 ...