题目链接:点击这里

题意:给出一个序列,求每一个数字在冒泡排序中出现的最大最小下标差。

从小到大考虑每一个数组,一个数字右边有多少个比他大的数字就是他右移的数量。用树状数组维护下就好了。

#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
#define maxn 100005int c[maxn], pre[maxn];
struct node {int num, pos;bool operator < (const node &a) const  {return num < a.num;}
} a[maxn];
int n;
int l[maxn], r[maxn];int lowbit (int x) {return x&(-x);
}void add (int x) {for (int i = x; i > 0; i -= lowbit (i)) {c[i]++;}
}int query (int x) {int ans = 0;for (int i = x; i <= n; i += lowbit (i)) {ans += c[i];}return ans;
}int main () {int t, kase = 0;scanf ("%d", &t);while (t--) {scanf ("%d", &n);for (int i = 1; i <= n; i++) {scanf ("%d", &a[i].num); pre[a[i].num] = i;a[i].pos = i;l[a[i].num] = r[a[i].num] = i;}printf ("Case #%d: ", ++kase);sort (a+1, a+1+n);memset (c, 0, sizeof c);for (int i = 1; i <= n; i++) {int tmp = query (a[i].pos); r[i] = max (pre[i]+tmp, r[i]);l[i] = min (l[i], i);add (a[i].pos);}for (int i = 1; i <= n; i++) {printf ("%d%c", abs (r[i]-l[i]), (i == n ? '\n' : ' '));}}return 0;
}

HDU 5775 (树状数组)相关推荐

  1. HDU - 5775 树状数组

    题意: 给出一个排列,要求用题目中的排序算法排序之后,算出每个数所到达的最左端和最右端位置的绝对值之差. 思路: 树状数组,每个数往右移动的距离就是右边比它小的数的个数,而左端点的位置就是初始位置和最 ...

  2. HDU 4358 树状数组+思路

    http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...

  3. hdu 4991(树状数组优化dp)

    Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. hdu 1166 树状数组解

    树状数组解决   (关于树状数组参考大佬的博客https://www.cnblogs.com/hsd-/p/6139376.html) 然后就很好理解这题了,代码附上 /*hdu 1166 单点修改, ...

  5. hdu 3333 树状数组+离线处理

    思路:既然要求的是不同的元素的和,那么我们可以想办法让每个值在区间中只出现一次,于是想到了离线的算法:将查询按照右端点排序,位置在右端点之前的元素都插入到树状数组中,对于已经出现过的值,我们要先删除( ...

  6. hdu 4417(树状数组+离线算法)

    解题思路:这道题要求某区间内比h小的个数,其实这里可以类似于树状数组求逆序数那样.关键是如何转换成树状数组的模型,这才是本题的难点. 我们首先分析,如果知道h在该区间的哪个位置,那么剩下的就很好做了. ...

  7. hdu 1394(树状数组求逆序数)

    解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...

  8. Weak Pair HDU - 5877 树状数组+离散化+DFS遍历

    题意 给我们一颗有根有向树 以及每个点得权值a[1]~a[n] 需要我们求出在这颗树种有多少对满足以下两个条件的pair (1)u是v的祖先节点 (2)a[u]*a[v]<= k N<=1 ...

  9. hdu 4970 树状数组 “改段求段”

    题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...

最新文章

  1. Js touchg事件在移动端网页中左右滑动效果
  2. R语言使用plot函数和lines函数可视化线图(line plot)时、图之间的主要区别是由选项type产生的、type参数常用参数说明、不同type生成的可视化图像对比
  3. linux shell 打印当前行号
  4. html下拉列表用ul,Vue.js做select下拉列表的实例(ul-li标签仿select标签)
  5. 设计模式-单例模式(1)
  6. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
  7. python 3.6.5 shell_Linux 安装 Python3.6.5
  8. java 中violate_Java中的Volatile关键字
  9. Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?
  10. 在学Python前学Linux,Python原来这么好学-1.2节: 在Linux中安装python
  11. 经典面试题(23):以下代码将输出的结果是什么?
  12. (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质
  13. 提交表单到mysql_node提交表单到mysql
  14. SurfaceGo配置轻量级LaTeX写作环境(MiKTeX)
  15. Java程序员的日常
  16. 微积分基本概念相关证明 —— 导数与极限(洛必达法则)
  17. 人对光波的三种特性_面试题:常用塑胶材料的特性及用途,你能列出几个?
  18. 用python做计算器(超级版)
  19. mac下免费svn工具
  20. 谈谈你对计算机的发展,结合您目前对计算机的认识,请您谈谈对计算机发展趋势的看法。...

热门文章

  1. Ubuntu 关机和重启命令
  2. PHP开发搭建游戏联运sdk
  3. Xflow学习笔记(一)操作界面
  4. SpringBoot——SpringBoot集成MyBatis
  5. “5G 将是一个彻底的失败通信技术” | 畅言
  6. ios 开发中 关闭软键盘的方法
  7. windows c++ log4cxx 输出控制台 中文异常 问题解决
  8. 二十天初级会计能过吗?
  9. 双十一,打包半价理解Vue的nextTick与watcher以及Dep的蓝色生死恋?
  10. MySql安装手册(二进制安装)