数据结构,划分树
文章平均质量分 88
hcx11333
菜鸡一枚,成长ing。。。
展开
-
HDU2665 Kth number(划分树模板题)
题意:给一个长度n的数列,和m次查询,每次输出区间[l,r]中第k小的数。 思路:划分树裸题,跟poj2104差不多。 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int inf =原创 2017-08-07 17:47:48 · 220 阅读 · 0 评论 -
HDU4251 The Famous ICPC Team Again(划分树裸)
题意:长度为n的数列,有m次询问,每次输出区间[l,r]的中位数。 思路:划分树模板套上即可。 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const int inf = 0x3f3f3f3f;原创 2017-08-07 17:57:10 · 195 阅读 · 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 · 220 阅读 · 0 评论 -
划分树
划分树定义 划分树是一种基于线段树的数据结构。主要用于快速求出(在log(n)的时间复杂度内)序列区间的第k小/大值。划分树的基本思想就是对于某个区间,把它划分成两个子区间,左边区间的数小于右边区间的数。查找的时候通过记录进入左子树的数的个数,确定下一个查找区间,最后范围缩小到1,就找到了。(百度百科) 另外划分树也可以在log(n)的时间复杂度内求出区间比k小的元素之和。 划分树示例原创 2017-08-08 22:29:11 · 275 阅读 · 0 评论 -
POJ2104 K-th Number
题意:给一个长度n的数列和m次查询(i,j,k),每次查询区间[i,j]内第k小数。 思路:划分树模板题。建树-查询即可,思路见代码。 #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const i原创 2017-08-06 17:01:31 · 201 阅读 · 0 评论 -
HDU4417 Super Mario(划分树+二分)
题意:给一个长度n的数列和m次查询(l,r,h),求区间[l,r]内小于等于h的元素个数。 思路:可以用划分树求区间内第k小数,然后二分k,根据k查询到不大于h的最大值,此时k就是结果。 #include #include #include #include #include #include #include #include using namespace std; typ原创 2017-08-06 18:05:32 · 195 阅读 · 0 评论