HDU 5775 (树状数组)
题目链接:点击这里
题意:给出一个序列,求每一个数字在冒泡排序中出现的最大最小下标差。
从小到大考虑每一个数组,一个数字右边有多少个比他大的数字就是他右移的数量。用树状数组维护下就好了。
#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 (树状数组)相关推荐
- HDU - 5775 树状数组
题意: 给出一个排列,要求用题目中的排序算法排序之后,算出每个数所到达的最左端和最右端位置的绝对值之差. 思路: 树状数组,每个数往右移动的距离就是右边比它小的数的个数,而左端点的位置就是初始位置和最 ...
- HDU 4358 树状数组+思路
http://acm.hdu.edu.cn/showproblem.php?pid=4358 如图所示,当k==3时,如果我们扫描到红线所在的位置. 则符合条件的区间就是从红线到两条紫线所包含的区间( ...
- hdu 4991(树状数组优化dp)
Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 1166 树状数组解
树状数组解决 (关于树状数组参考大佬的博客https://www.cnblogs.com/hsd-/p/6139376.html) 然后就很好理解这题了,代码附上 /*hdu 1166 单点修改, ...
- hdu 3333 树状数组+离线处理
思路:既然要求的是不同的元素的和,那么我们可以想办法让每个值在区间中只出现一次,于是想到了离线的算法:将查询按照右端点排序,位置在右端点之前的元素都插入到树状数组中,对于已经出现过的值,我们要先删除( ...
- hdu 4417(树状数组+离线算法)
解题思路:这道题要求某区间内比h小的个数,其实这里可以类似于树状数组求逆序数那样.关键是如何转换成树状数组的模型,这才是本题的难点. 我们首先分析,如果知道h在该区间的哪个位置,那么剩下的就很好做了. ...
- hdu 1394(树状数组求逆序数)
解题思路:这道题是求循环数组中逆序数最小值,求逆序数这里肯定是用树状数组.只是这里有一点点变化,由于题目中n位数是0-n-1的一个排列,所以num[i]可表示为比num[i]小的数的个数.把第一位的数 ...
- Weak Pair HDU - 5877 树状数组+离散化+DFS遍历
题意 给我们一颗有根有向树 以及每个点得权值a[1]~a[n] 需要我们求出在这颗树种有多少对满足以下两个条件的pair (1)u是v的祖先节点 (2)a[u]*a[v]<= k N<=1 ...
- hdu 4970 树状数组 “改段求段”
题意:塔防.给1--n,给出m个塔,每个塔有攻击力,给出k个怪兽的位子和血量,问有几只可以到达n点. 今天刚刚复习了树状数组,就碰到这个题,区间更新.区间求和类型.第三类树状数组可以斩. 注意一下大数 ...
最新文章
- Js touchg事件在移动端网页中左右滑动效果
- R语言使用plot函数和lines函数可视化线图(line plot)时、图之间的主要区别是由选项type产生的、type参数常用参数说明、不同type生成的可视化图像对比
- linux shell 打印当前行号
- html下拉列表用ul,Vue.js做select下拉列表的实例(ul-li标签仿select标签)
- 设计模式-单例模式(1)
- win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法
- python 3.6.5 shell_Linux 安装 Python3.6.5
- java 中violate_Java中的Volatile关键字
- Java不是true值不变_Java语言中String a=a;String b=a; 为什么 a==b 值为 true?
- 在学Python前学Linux,Python原来这么好学-1.2节: 在Linux中安装python
- 经典面试题(23):以下代码将输出的结果是什么?
- (王道408考研数据结构)第五章树-第一节:树的定义、基本用语和常考性质
- 提交表单到mysql_node提交表单到mysql
- SurfaceGo配置轻量级LaTeX写作环境(MiKTeX)
- Java程序员的日常
- 微积分基本概念相关证明 —— 导数与极限(洛必达法则)
- 人对光波的三种特性_面试题:常用塑胶材料的特性及用途,你能列出几个?
- 用python做计算器(超级版)
- mac下免费svn工具
- 谈谈你对计算机的发展,结合您目前对计算机的认识,请您谈谈对计算机发展趋势的看法。...