
数据结构-树套树 / 整体二分
文章平均质量分 63
树套树 / 整体二分
_lifehappy_
这个作者很懒,什么都没留下…
展开
-
P3242 [HNOI2015] 接水果(整体二分、扫描线)
P3242 [HNOI2015] 接水果给定一棵树,定义给定了ppp个盘子,每个盘子是树上u,vu, vu,v两点的路径,且盘子有权值,定义水果,水果也是树上u,vu, vu,v两点间的路径。有qqq个询问,每次给定u,v,ku, v, ku,v,k,表示可以接住水果u,vu, vu,v的盘子中权值第kkk小的权值是什么,输出权值,一个盘子可以接住一个水果,当且仅当盘子是水果的子路径。考虑如何求是否覆盖,对每个点dfsdfsdfs序得到[sti,edi][st_i, ed_i][sti,edi],原创 2021-08-06 20:02:11 · 259 阅读 · 0 评论 -
B.The Tortoise and the Hare 长春
B. The Tortoise and the Hare给定一个长度为nnn的数组a,(1≤ai<m)a, (1 \leq a_i < m)a,(1≤ai<m),mmm是一个给定的数(1≤m≤109)(1 \leq m \leq 10 ^ 9)(1≤m≤109),有QQQ次操作,分为两类:给定u,v,(1≤u≤n,1≤v<m)u, v,(1 \leq u \leq n, 1 \leq v < m)u,v,(1≤u≤n,1≤v<m),把数组上aua_uau的值改为原创 2021-05-26 17:28:30 · 300 阅读 · 0 评论 -
P2839 [国家集训队]middle(二分 套 主席树)
P2839 [国家集训队]middle有一个长度为nnn的序列,有mmm次询问,每次询问a,b,c,da, b, c, da,b,c,d,为l∈[a,b],r∈[c,d]l \in [a, b], r \in [c, d]l∈[a,b],r∈[c,d],[l,r][l, r][l,r]区间的中位数最大是多少,强制在线,1≤n≤20000,1≤m≤250001 \leq n \leq 20000, 1 \leq m \leq 250001≤n≤20000,1≤m≤25000。由于有a≤b≤c≤da \l原创 2021-05-12 19:25:08 · 233 阅读 · 0 评论 -
E. Sign on Fence(整体二分 + 线段树维护区间最大连续 1 的个数)
E. Sign on Fence给定一个长度为nnn的数组aaa,1≤ai≤1091 \leq a_i \leq 10 ^ 91≤ai≤109,有mmm次询问,每次给定l,r,kl, r, kl,r,k,要我们在[l,r][l, r][l,r]区间内找到一个长度为kkk的区间,使得区间最小值最大,输出最大值。考虑二分答案,如果当前二分的区间是[l,r][l, r][l,r],我们把大于midmidmid的点,在数组中都设置为111,小于等于midmidmid的点,在数组中都设置为000,考虑用线段树原创 2021-05-12 17:11:29 · 603 阅读 · 0 评论 -
H - Hello Ms. Ze(树状数组套主席树,线段树上二分)
H - Hello Ms. Ze给定nnn种不同的材料,第iii种材料有aia_iai个,有mmm个操作,操作分为两类:把第xxx种材料修改为yyy个,只用[l,r][l, r][l,r]区间的材料制作衣服,每件衣服要用kkk个不同的材料,最多能做多少件,先不考虑修改操作,对于区间[l,r][l, r][l,r]中的原料,我们可以做最多多少衣服,如何求解,考虑二分答案,假设我们可以最多做xxx件衣服,显然对于个数大于等于xxx的材料,在每件衣服中我们只能使用一次,假设我们当前二分的区间为[原创 2021-04-06 14:07:50 · 324 阅读 · 0 评论 -
P4602 [CTSC2018]混合果汁(主席树)
P4602 [CTSC2018]混合果汁共有nnn种果汁,第iii种果汁的美味度为did_idi,每升价格为pip_ipi,在一瓶混合果汁中,最多只能添加lil_ili升。有mmm个询问,每次询问给出两个数g,Lg, Lg,L,我们要找出价格不大于ggg,体积不小于LLL的混合果汁的最大美味度。混合果汁的美味度为所有参与混合的果汁的最小值,如果没有满足条件的混合果汁则输出−1-1−1。把果汁按照美味度排一个序,对每个询问二分枚举did_idi,然后judge[i,n][i, n][i,n]上原创 2021-04-02 21:34:39 · 317 阅读 · 0 评论 -
#4604. The kth maximum number(整体二分 + 树套树)
#4604. The kth maximum number给定一个大小不超过5×1055 \times 10 ^ 55×105的矩形区域,有一些点有点权。每次询问给定x1,y1,x2,y2,kx_1, y_1, x_2, y_2, kx1,y1,x2,y2,k问以x1,y1x_1, y_1x1,y1为右下角,x2,y2x_2, y_2x2,y2为左上角的矩形中权值第kkk大是多少。其实于P1527 [国家集训队]矩阵乘法是基本差不多的,就是矩形的大小变大了,无法进行二维树状数组操作但原创 2021-04-01 22:24:19 · 225 阅读 · 0 评论 -
P3250 [HNOI2016]网络(整体二分)
P3250 [HNOI2016]网络给定一棵树,有三种操作:给定u,v,wu, v, wu,v,w,表示u,vu, vu,v路径上有一个重要度为www的请求,给定ttt,第ttt个发生的请求结束,给定一个xxx,假设xxx发生故障,未被影响的请求的最大重要度为多少,如果没有请求则输出−1-1−1。可以考虑二分答案,如果大于等于midmidmid的请求都经过了这个点,那么答案一定是小于midmidmid的,接下来问题转换为,如何判断大于等于midmidmid的请求是否都经过了这个点,可以考虑树原创 2021-03-31 19:43:10 · 270 阅读 · 0 评论 -
P4175 [CTSC2008]网络管理(整体二分)
P4175 [CTSC2008]网络管理给定一棵有nnn个节点的树,点有点权,有两种操作:① 修改某个点的点权,② 查询两点路径间的点权第kkk大。给定u,vu, vu,v,选定111号节点为根节点,设inf(x)inf(x)inf(x)表示从根节点到点xxx的信息,两点间的信息可以描述为inf(u)+inf(v)−inf(lca(u,v))−fa(inf(lca(u,v)))inf(u) + inf(v) - inf(lca(u, v)) - fa(inf(lca(u, v)))inf(u)+inf(原创 2021-03-30 17:32:11 · 266 阅读 · 0 评论 -
E 速度即转发(牛客挑战赛48)(树套树)
速度即转发给定一个长度为nnn的数组aaa,里面元素为a1,a2,a3,…,an−1,ana_1, a_2, a_3, \dots, a_{n - 1}, a_na1,a2,a3,…,an−1,an。有两种操作:修改ap=ka_p = kap=k。给定l,r,kl, r, kl,r,k,设S(x)=∑i=lrmax(ai−x,0)S(x) = \sum\limits_{i = l} ^{r} max(a_i - x, 0)S(x)=i=l∑rmax(ai−x,0),求x∈[0,10原创 2021-03-20 15:28:26 · 276 阅读 · 0 评论 -
2019 ICPC 南京 F. Paper Grading(字典树dfs序上树套树)
Paper Grading题意:给定nnn个字符串,有两种操作:一、给定i,ji, ji,j,交换第iii个跟第jjj个字符串。二、给定 str ,k,l,rk, l, rk,l,r,问你在区间[l,r][l, r][l,r]中的字符,与 str 至少有kkk个公共前缀的字符串有多少个。先建立一颗字典树,对于满足要求的字符串,我们可以在字典树中查找 str 的第 kkk 个字符落在的点rtrtrt,然后在以 rtrtrt 为根的子树上查找在区间[l,r][l, r][l,r]的字符有多少个,考虑原创 2021-02-24 11:28:52 · 518 阅读 · 0 评论 -
几道偏序问题(数据结构)
P3157 [CQOI2011]动态逆序对#include <bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e5 + 10;int root[N], ls[N << 8], rs[N << 8], sum[N << 8], cnt;int n, m, pos[N];inline int lowbit(int x) { return x &原创 2021-02-23 20:47:00 · 368 阅读 · 0 评论 -
P3250 [HNOI2016]网络(利用堆建线段树 + 树剖)
P3250 [HNOI2016]网络做法有点神奇!!!利用堆作为节点建立一颗线段树,用堆维护线段树上点的信息。说说查询操作,我们的目的是要查询,没有经过这个点的事件最大值,考虑如何维护。我们定义线段树上的信息,每个点记录的是没有经过这个区间的事件值。事件插入,我们可以利用树剖得到从x−>yx->yx−>y的路径形成的logn\log nlogn个连续的段,我们先把这些段给存下来,然后再按照lll排个序,在这些段之外插入事件值。同样的事件删除,我们只要在这些段之外删除事件值即可原创 2021-02-20 15:26:00 · 316 阅读 · 0 评论 -
ICPC 徐州 H Yuuki and a problem (树状数组套主席树)
Yuuki and a problem先不管第一问的修改操作,考虑如何达到第二问的查询操作,题目要我们给出一个区间[l,r][l, r][l,r]中,不能通过权值+++得到的最小的数字是什么,假设我们已经可以得到[1,x][1, x][1,x]之间的数了,且,我们询问权值在[1,x+1][1, x + 1][1,x+1]之间的和为sumsumsum,那么[1,sum][1, sum][1,sum]之间的数一定能通过+++法得到,我们分类讨论一下:sum=sumxsum = sum_xsum=su原创 2021-02-10 19:53:35 · 439 阅读 · 0 评论 -
#279. [SYZOI Round1] 滑稽♂树(树状数组套主席树)
#279. [SYZOI Round1] 滑稽♂树子树上的问题,考虑dfsdfsdfs序,第kkk大,可以用主席树嘛,支持修改,那就树状数组上套主席树,参考P4175 [CTSC2008]网络管理(树状数组套主席树)#include <bits/stdc++.h>using namespace std;const int N = 3e4 + 10, maxn = 10000;int head[N], to[N << 1], nex[N << 1], cnt原创 2021-02-09 20:43:45 · 252 阅读 · 0 评论 -
P4175 [CTSC2008]网络管理(树状数组套主席树)
P4175 [CTSC2008]网络管理每次询问两点间的第kkk大,考虑建立nnn棵主席树,每棵主席树记录的是从根节点到当前节点的状态,由于主席树是一种类似前缀和的数据结构,可以使用差分的方式得到(u,v)(u, v)(u,v)点对之间的主席树为u+v−lca(u,v)−fa(lca(u,v))u + v - lca(u, v) - fa(lca(u, v))u+v−lca(u,v)−fa(lca(u,v)),即这一段路径上的信息可用这四棵主席树加减得到,但是这样只能处理静态问题,这里还增加了修改操作原创 2021-02-09 20:39:35 · 314 阅读 · 0 评论