题意:

给出一个排列,要求用题目中的排序算法排序之后,算出每个数所到达的最左端和最右端位置的绝对值之差。

思路:

树状数组,每个数往右移动的距离就是右边比它小的数的个数,而左端点的位置就是初始位置和最终位置的较小值。

代码:

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 111111;struct BIT {int n;int C[MAXN];void init(int n) {this->n = n;memset(C, 0, sizeof(C));}int lowbit(int x) {return x & -x;}void add(int x, int y) {while (x <= n) {C[x] += y;x += lowbit(x);}}int sum(int x) {int res = 0;while (x > 0) {res += C[x];x -= lowbit(x);}return res;}} bit;int a[MAXN], l[MAXN], r[MAXN];int main() {int T, cs = 0;scanf("%d", &T);while (T--) {int n;scanf("%d", &n);bit.init(n);for (int i = 1; i <= n; i++)scanf("%d", &a[i]);for (int i = n; i >= 1; i--) {r[a[i]] = i + bit.sum(a[i]);bit.add(a[i], 1);l[a[i]] = min(i, a[i]);}printf("Case #%d:", ++cs);for (int i = 1; i <= n; i++)printf(" %d", abs(l[i] - r[i]));printf("\n");}return 0;
}

HDU - 5775 树状数组相关推荐

  1. HDU 5775 (树状数组)

    题目链接:点击这里 题意:给出一个序列,求每一个数字在冒泡排序中出现的最大最小下标差. 从小到大考虑每一个数组,一个数字右边有多少个比他大的数字就是他右移的数量.用树状数组维护下就好了. #inclu ...

  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. 解决Tensorflow 使用时cpu编译不支持警告
  2. python工程师月薪多少-Python全栈工程师为何这么火薪资这么高看了才知道
  3. 4 个概念,1 个动作,让应用管理变得更简单
  4. mysql 磁盘利用率100_磁盘空间使用率100%的故障处理
  5. 在jQuery和JavaScript中,实现转跳
  6. CSS3弹性伸缩布局(一)——box布局
  7. 如何在Android主屏幕上添加热点快捷方式
  8. micropython 人脸识别检测_Flask实战!从后台管理到人脸识别,六款优质Flask开源项目介绍...
  9. Linux的yum命令及基本用法
  10. 在J2ME和WAP中实现电话呼叫功能
  11. 4月10日服务器例行维护公告,4月12日服务器例行维护公告(已完成)
  12. Rust : time,关于程序运行的计时
  13. AxureRP9授权码
  14. intellij idea快捷键精简版
  15. 【mmdetection3d】——3D 目标检测 KITTI 数据集
  16. PHPExcel浏览器输出Excel2007出错
  17. 心智与认知(1): 反馈循环(Feedback loop)
  18. UE4渲染设置介绍(Rendering Setting)
  19. css之calc,初探CSS3中的calc()功能
  20. 爬虫学习(14):selenium自动化测试(三):鼠标和键盘操作

热门文章

  1. ControlNet精准控制AI绘画教程
  2. 前端学习路线+资源整合
  3. python中取反是什么意思_20191031:Python取反运算详解
  4. Spark做数据分析:Spark大数据分析的优势
  5. “5G 将是一个彻底的失败通信技术” | 畅言
  6. mc一进服务器就未响应,大佬们这得怎么办啊,一进服务器游戏就崩溃,
  7. 腾讯云GPU服务器部署Ai绘画Stable Diffusion 小白可用
  8. svg、canvas、css3d实现数据可视化(伪3d)
  9. php写防汛物资系统,防汛抗旱信息管理系统
  10. find命令排除某些目录或文件