![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构,划分树
文章平均质量分 88
hcx11333
菜鸡一枚,成长ing。。。
展开
-
HDU2665 Kth number(划分树模板题)
题意:给一个长度n的数列,和m次查询,每次输出区间[l,r]中第k小的数。思路:划分树裸题,跟poj2104差不多。#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int inf =原创 2017-08-07 17:47:48 · 222 阅读 · 0 评论 -
HDU4251 The Famous ICPC Team Again(划分树裸)
题意:长度为n的数列,有m次询问,每次输出区间[l,r]的中位数。思路:划分树模板套上即可。#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const int inf = 0x3f3f3f3f;原创 2017-08-07 17:57:10 · 200 阅读 · 0 评论 -
Hdu3473 Minimum Sum(划分树)
题意:给一个数列x0,x1,,,xn,之后给m次询问(l,r),求使的值最小的x,输出结果。思路:想了半天,最后确定了x一定是数列的中位数,证明:对于上图中的情况,四段长度分别为a、b、c、d。取x为中位数x3时,结果S1=(a+b) + b + 0 + c + (c+d).对于第二个图,假设取x=x3-△x,得S2=(a+b-△x) + (b-△x)原创 2017-08-08 17:02:32 · 225 阅读 · 0 评论 -
划分树
划分树定义划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k小/大值。划分树的基本思想就是对于某个区间,把它划分成两个子区间,左边区间的数小于右边区间的数。查找的时候通过记录进入左子树的数的个数,确定下一个查找区间,最后范围缩小到1,就找到了。(百度百科)另外划分树也可以在log(n)的时间复杂度内求出区间比k小的元素之和。划分树示例原创 2017-08-08 22:29:11 · 279 阅读 · 0 评论 -
POJ2104 K-th Number
题意:给一个长度n的数列和m次查询(i,j,k),每次查询区间[i,j]内第k小数。思路:划分树模板题。建树-查询即可,思路见代码。#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;const i原创 2017-08-06 17:01:31 · 205 阅读 · 0 评论 -
HDU4417 Super Mario(划分树+二分)
题意:给一个长度n的数列和m次查询(l,r,h),求区间[l,r]内小于等于h的元素个数。思路:可以用划分树求区间内第k小数,然后二分k,根据k查询到不大于h的最大值,此时k就是结果。#include#include#include#include#include#include#include#includeusing namespace std;typ原创 2017-08-06 18:05:32 · 199 阅读 · 0 评论