bzoj 4009 接水果 整体二分】的更多相关文章

Description 先给出一些盘子, 用路径x-y表示, 有权值 再有Q个询问, 表示水果, 用路径x-y表示 如果盘子是水果的子路径, 可以接住 对于每个水果, 输出可以接住它的盘子的第k小权 Solution 对于x-lca-y的盘子,水果一定一个在x子树,一个在y子树 对于x-lca的盘子,水果一定一个在x子树,一个在lca的非x子树,即dfn序中的两段区间 将一对区间(盘子).一对点(水果)按dfn序顺序转化成一个矩形(盘子)和一个坐标(水果) 很明显就是整体二分了 #include…
LOJ BZOJ 洛谷 又是一个三OJ rank1!=w= \(Description\) (还是感觉,为啥非要出那种题目背景啊=-=直接说不好么) 给定一棵树和一个路径集合(每条路径有一个权值).\(Q\)次询问,每次询问给定一条路径,求路径集合中完全被这条路径包含的路径中,权值第\(k\)大的是多少. \(n,m,Q\leq40000\). \(Solution\) 首先考虑一条路径\((a,b)\)完全包含路径\((u,v)\),需要满足什么条件. 记\(L[x]\)为\(x\ DFS\)…
整体二分+扫描线 树状数组 具体做法看这里a CODE #include <cctype> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; template<class T>inline void read(T &res) { char ch; int flg = 1; for(;!isdigit(ch=getchar());)i…
Description 风见幽香非常喜欢玩一个叫做osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC了The big black, 她觉得这个游戏太简单了,于是发明了一个更加难的版本.首先有一个地图,是一棵由\(n\)个顶点.\(n-1\)条边组成的树.这颗树上有\(P\)个盘子,每个盘子实际上是一条路径,并且每个盘子还有一个权值.第\(i\)个盘子就是顶点\(a_{i}\)到顶点\(b_{i}\)的路径(由于是树,所以从\(a_{i}\)到\(b_{i}\)的路径是唯一的)…
考虑整体二分,问题就变成了每个(水果)路径有多少个满足条件(权值)的(盘子)子路径 考虑一个盘子(a,b)表示两端点(不妨设dfn[a]<dfn[b]),那么他能接到的水果(u,v)一定满足(不妨设dfn[u]<dfn[v]): 1.如果a是b的祖先,则u在(a的在(b,a)链上的孩子)这个子树外,v在b子树内 2.否则,u在a的子树内,v在b的子树内 那么把一个水果(a,b)看成是一个二维点(dfn[a],dfn[b]),对于每个盘子,就是做一个二维区间+1 差分以后变成一个二维数点问题,可…
题目链接 BZOJ 洛谷 每个国家的答案可以二分+求前缀和,于是可以想到整体二分. 在每次Solve()中要更新所有国家得到的值,不同位置的空间站对应不同国家比较麻烦. 注意到每次Solve()其国家数是与区间大小相关的,so根据国家处理,区间更新空间站的值,用vector枚举对应空间站得到每个国家的值.(or边表) //20048kb 11292ms //1316ms 24.8MB #include <cstdio> #include <cctype> #include <…
题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理询问.即二分标准可以直接用点的标号. 结构体的赋值可以改为赋值操作的编号.(这样内存没那么连续?想多了你) 改了半下午,优化了500ms.. //6980kb 10584ms 好慢啊QAQ //4208ms 7.59MB #include <cstdio> #include <cctype&…
Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black, 她觉得这个游戏太简单了,于是发明了一个更 加难的版本.首先有一个地图,是一棵由 n 个顶点.n-1 条边组成的树(例如图 1 给出的树包含 8 个顶点.7 条边).这颗树上有 P 个盘子,每个盘子实际上是一条 路径(例如图 1 中顶点 6 到顶点 8 的路径),并且每个盘子还有一个权值.第 i 个 盘子就是顶点a_i到顶点b_i的路径(由于是…
[HNOI2015]接水果 时间限制:60s      空间限制:512MB 题目描述 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black,  她觉得这个游戏太简单了,于是发明了一个更 加难的版本.首先有一个地图,是一棵由 n 个顶点.n-1 条边组成的树(例如图 1 给出的树包含 8 个顶点.7 条边).这颗树上有 P 个盘子,每个盘子实际上是一条 路径(例如图 1 中顶点 6 到顶点 8 的路径),并且每个盘子还有…
浅谈离线分治算法:https://www.cnblogs.com/AKMer/p/10415556.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=4009 树套树写法:https://www.cnblogs.com/AKMer/p/10181501.html 把二维线段树部分改成整体二分就行了. 时间复杂度:\(O(nlog^2n)\) 空间复杂度:\(O(n)\) 代码如下: #include <cstdio> #includ…
题面 传送门 思路 本题其实有在线做法......但是太难写了,退而求其次写了离线 基本思路就是,考虑一个盘子以及它能接到的所有水果 可以发现,这个水果的端点一定在这个盘子两端的"子树"内(加引号是因为可能是一条链顶端外面的"子树") 那么,可以把模型抽象成:盘子就是矩形,两个端点就是两个维度上的限制,而水果就是点 一个水果可以被接住,当且仅当这个水果的点在某个盘子的矩形内部 考虑盘子的不同情况: 如果盘子是有一个折点的折链,那么两边的限制,就是两个端点的子树dfs…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4009 题解 考虑怎样的情况就会有一个链覆盖另一个链. 设被覆盖的链为 \(a - b\),覆盖的链为 \(x - y\).假设有 \(dfn[a] < dfn[b], dfn[x] < dfn[y]\) 那么如果 \(a\) 是 \(b\) 的祖先,那么令 \(g\) 为 \(a\) 的子树中包含 \(b\) 的点,那么 \(x, y\) 中有一个点在 \(g\) 的子树外面,一个在 \(…
给每个国家建一个链表,这样分治过程中的复杂度就和序列长度线形相关了,无脑套整体二分就可以. (最坑的地方是如果所有位置都是一个国家,那么它的样本个数会爆longlong!!被这个坑了一次,大于p[i]的时候break就行了). #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> #define N 300005 #de…
4538: [Hnoi2016]网络 题意:一棵树,支持添加一条u到v权值为k的路径,删除之前的一条路径,询问不经过点x的路径的最大权值 考虑二分 整体二分最大权值,如果\(k \in [mid+1,r]\)中的路径有不经过x的,那么这个询问的答案在\([mid+1,r]\)中 链修改,点查询\(\rightarrow\)点修改,子树查询,方法是\(u,v +1\ ;\ lca,fa[lca] -1\) 用树状数组就可以完成 这里的整体二分不需要对每个询问保存当前贡献,因为每次只需要考虑一段的贡…
给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 愚蠢的名字...... 整体二分,影响因子就是矩阵里的数 把$\le mid$的矩阵元素加到二维树状数组里然后询问分成两组就行了 可以把矩阵元素权值排序后直接二分矩阵元素而不是值 复杂度$O(nlog^3n)$ 用排序代替一维树状数组理论上更快,但需要把矩阵里的元素和查询放到一个数组里再排序貌似常数太大 然后发现黄学长的做法是错误的复杂度不对....但竟然比我快....   二维树状数组一定不要写错!!! #include…
题目大意:略 洛谷传送门 这道题在洛谷上数据比较强 貌似这个题比较常见的写法是树状数组套主席树,动态修改 我写的是整体二分 一开始的序列全都视为插入 对于修改操作,把它拆分成插入和删除两个操作 像$CDQ$分治一样,用结构体记录操作的位置,修改的权值等 假设为需要处理的询问分配了一个答案$mid$ 查询区间第$K$小,我们只需要查询区间内权值为$[l,mid]$的数有几个 每次插入/删除,都看这次操作修改的权值是否$\in[l,mid]$ 如果是,说明这个它对答案有贡献,在它在原序列的位置上$+…
题目大意:略 洛谷传送门 整体二分裸题 考虑只有一个国家的情况如何处理 对询问数量二分答案,暴力$O(m)$打差分,求前缀和验证,时间是$O(mlogK)$ 如果有$n$个国家,就是$O(nmlogK)$,非常不优秀的时间复杂度 发现我们对于每个国家都进行一次二分很浪费时间 考虑把国家分成一定数量的集合 每次二分出一个答案$mid$ 把集合内的国家按照能否满足要求分成两个集合$S1,S2$ 如果能满足要求,当前询问的mid不一定是最优解,答案范围一定是$[l,mid]$ 如果不能满足要求,当前$…
题目链接 BZOJ 洛谷 (以下是口胡) 对于多组的询问.修改,我们可以发现: 假设有对p1,p2,p3...的询问,在这之前有对p0的修改(比如+1),且p0<=p1,p2,p3...,那么我们可以在修改完p0后对p1,p2,p3...这些询问更改(比如需求-1),以后对于p1,p2,p3...都不需要管这个修改了. 这样每次需要操作的序列长度只与当前区间有关. 而这个p0我们通过二分确定.不断根据p0将操作划分为两部分(两个队列),当二分到底时(l==r),队列里所有询问的答案就是l了. 复…
整体二分板题,没啥好讲的-注意是个环-还有所有贡献会爆longlong,那么只要在加之前判断一下有没有达到需要的值就行了- CODE #include <set> #include <queue> #include <cctype> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long long LL; c…
[HNOI2015]接水果 给出一个树上路径集合\(S\) 多次询问\(x,y\)中的\(k\)小值 如果你问我数列上那么我会 树上的话 树上差分了吧直接?- 令 \(st_x<st_y\) 1.假设 \(LCA(x,y) == x\) (学过树的人都知道不可能等于y) 然后树剖乱跳到一个路径上不在 \(x->y\) 上的 \(z\) 就可以了 \([1,st_z-1] or [st_z+1,n]\) 2.1假设不成立- 那么一个点在 \([st_x,ed_x]\) , 另一个在 \([st_…
4009: [HNOI2015]接水果 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 636  Solved: 300[Submit][Status][Discuss] Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果. 由于她已经DT FC 了The big black,  她觉得这个游戏太简单了,于是发明了一个更 加难的版本.首先有一个地图,是一棵由 n 个顶点.n-1 条边组成的树(例如图…
[BZOJ4009]接水果(整体二分,扫描线) 题面 为什么这都是权限题???,洛谷真良心 题解 看到这道题,感觉就是主席树/整体二分之类的东西 (因为要求第\(k\)大) 但是,读完题目之后,我们发现路径之间的包含关系很不好搞 那么,我们来画画图 这是第一种情况,\(lca\)不是\(u,v\) \(u,v\)分别是一个盘子的两端 如果被一个水果完全覆盖, 那么,这个水果的两端分别在\(u,v\)的子树中 设\(dfn[u]\)是\(u\)的\(dfs\)序 \(low[u]\)是子树中最大的…
正解:整体二分+树状数组 解题报告: 传送门! 题目还是大概解释下?虽然其实是看得懂的来着,,, 大概就是说给一棵树.给定一些询问,每个询问都是说在两个点之间的路径上的子路径的第k大是什么 然后看到这种动态区间第k大就要想到整体二分嘛 然后想怎么实现单个询问的二分 显然是二分一个值mid,然后大于mid的路径都可以加入,然后看水果上有几个盘子和k比大小就好昂 所以难点就是在,怎么表示出盘子是水果的子路径,怎么求水果上有几个盘子(其实是一个问题,,,QwQ) 首先可以想到按照一般的套路应该是利用树…
Description Byteotian Interstellar Union (BIU) has recently discovered a new planet in a nearby galaxy. The planet is unsuitable for colonisation due to strange meteor showers, which on the other hand make it an exceptionally interesting object of st…
传送门 整体二分好题. 考虑水果被盘子接住的条件. 不妨设水果表示的路径为(x1,y1)(x_1,y_1)(x1​,y1​),盘子表示的为(x2,y2)(x_2,y_2)(x2​,y2​) 不妨设dfn[x2]>dfn[y2],dfn[x1]>dfn[y1]dfn[x_2]>dfn[y_2],dfn[x_1]>dfn[y_1]dfn[x2​]>dfn[y2​],dfn[x1​]>dfn[y1​] 那么有两种情况. 第一种: y2y_2y2​是x2x_2x2​的祖先. 这…
BZOJ 2527 Meteors 题意 一个圆环上有m个位置,编号为1~m,分别属于n个国家. 有k个时刻,每个时刻都会给圆环上的一个区间中每个位置的值加上一个数. 每个国家有一个目标,问对于每个国家,哪个时刻它拥有的每个位置的数值之和会达到它的目标. 题解 这道题也是一道整体二分题.二分到达目标的时间mid,将l~mid的每个修改操作在树状数组中执行,然后看每个当前询问集合中的国家是否达到了目标,达到的放左边,没达到的放右边. #include <cstdio> #include <…
BZOJ 3110 K大数查询 题面 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少. 题解 这道题一个好写的做法是"整体二分". 我做的上一道整体二分的题目在这里. 整体二分的主要过程是:二分答案,然后按照 答案比当前mid小/答案比当前mid大 将询问分为两组,一组放在左边,另一组放在右边,然后递归进行左右两边的二分. 这道题有修改操…
题目链接 BZOJ 洛谷 整体二分求的是第K小(利用树状数组).求第K大可以转为求第\(n-K+1\)小,但是这样好像得求一个\(n\). 注意到所有数的绝对值\(\leq N\),将所有数的大小关系反过来 第\(K\)大就是第\(K\)小了.所有数\(A[i]\)改为\(n-A[i]\),输出的时候也改为\(n-Ans[i]\). 区间加入一个数\(C\)可以直接用线段树区间加,也可以树状数组维护常数会小很多. \(n*m=2.5*1e9 > MAX\_INT\) 也是没谁了.. 现学了一波树…
题目描述 给出一棵n个点的树,给定m条路径,每条路径有一个权值.q次询问求一个路径包含的所有给定路径中权值第k小的. 输入 第一行三个数 n和P 和Q,表示树的大小和盘子的个数和水果的个数. 接下来n-1 行,每行两个数 a.b,表示树上的a和b 之间有一条边.树中顶点 按1到 n标号. 接下来 P 行,每行三个数 a.b.c,表示路径为 a 到 b.权值为 c 的盘子,其 中0≤c≤10^9,a不等于b.  接下来Q行,每行三个数 u.v.k,表示路径为 u到 v的水果,其中 u不等于v,你需…
[BZOJ4009][HNOI2015]接水果 Description 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black,  她觉得这个游戏太简单了,于是发明了一个更加难的版本.首先有一个地图,是一棵由 n 个顶点.n-1 条边组成的树(例如图 1给出的树包含 8 个顶点.7 条边).这颗树上有 P 个盘子,每个盘子实际上是一条路径(例如图 1 中顶点 6 到顶点 8 的路径),并且每个盘子还有一个权值.第 i 个盘子…