随笔分类 - 数据结构—线段树
摘要:按结束时间排序,然后开个线段树,按照排序后的牛群贪心的选 贪心的依据是选哪头牛都是选,不如给后面的多省一点空间 cpp include include include using namespace std; const int N=50005; int m,n,c,ans; struct xds
阅读全文
摘要:bzoj题面什么鬼啊…… 题目大意:有一个初始值均为0的数列,n次操作,每次将数列(ai,bi 1)这个区间中的数与ci取max,问n次后元素和 离散化,然后建立线段树,每次修改在区间上打max标记即可 cpp include include include include using namesp
阅读全文
摘要:长得挺唬人的贪心,按照右端点排序,用最小值线段树的询问判断当前牛是否能放进去,能的话更新线段树,ans++ 来自https://www.cnblogs.com/rausen/p/4529245.html非常严谨的证明
阅读全文
摘要:设f[i]为i时刻最小花费 把牛按l升序排列,每头牛能用f[l[i] 1]+c[i]更新(l[i],r[i])的区间min,所以用线段树维护f,用排完序的每头牛来更新,最后查询E点即可 cpp include include include using namespace std; const in
阅读全文
摘要:参考:https://blog.csdn.net/u010336344/article/details/53034372 神一样的线段树 线段树上维护:ll从左开始最长空段;rr从右开始最长空段;len区间中最长空段;tg: 1不全是空的,0区间内全是空的,1区间内全是满的;lz下传标记: 1没标记
阅读全文
摘要:考虑每头牛到达之后的影响,u到达之后,从1到其子树内的点需要放慢的都多了一个,p为u子树内点的牛ans会加1 用线段树维护dfs序,每次修改子树区间,答案直接单点查询p即可 cpp include include using namespace std; const int N=100005; in
阅读全文
摘要:这几天写USACO水题脑子锈住了……上来就贪心,一交就WA 事实上这个是一个叫最短路树的东西,因为能保证只有一条最短路,所以所有最短路合起来是一棵以1为根的树,并且在这棵树上,每个点被精灵占据的路是它通向father的 先spfa把最短路dis[]和最短路树求出来,把被选入最短路树的边打上删除标记
阅读全文
摘要:在线段树上记录长度、区间01翻转标记、当前1个数。传递tag的时候用长度 1个数即可 cpp include include using namespace std; const int N=100005; int n,m; struct qwe { int l,r,len,v,tg; }t[N'9
阅读全文
摘要:要求区间取min和max,可以用st表或线段树维护 st表 cpp include include using namespace std; const int N=100005; int n,q,b[N],mn[N][20],mx[N][20]; int read() { int r=0,f=1;
阅读全文
摘要:关于没有忍者的区间用线段树判就好啦 然后把剩下的区间改一改:l/r数组表示最左/最右没被删的点,然后删掉修改后的左边大于右边的;l升r降排个序,把包含完整区间的区间删掉; 然后设f/g数组表示i前/后的最少需要忍者数,这个贪心来转移即可,就是把忍者放在区间的最右/左位置 然后对于每个r判断。为什么是
阅读全文
摘要:一眼做法,好处是好想好写坏处是常数大,容易被卡(bzoj loj 洛谷开O2 能AC,不开有90分…… 大概就是树剖之后维护线段树,在线段树的每个节点上上维护一个线性基,暴力\\( 60^2 \\)的合并儿子 对于每次查询,在树上跳重链,把这些区间的线性基暴力合并上,然后ans在合并之后的线性基上贪
阅读全文
摘要:强烈安利:http://blog.csdn.net/qq_34637390/article/details/51313126 这篇讲标记讲的非常好,这个标记非常神奇…… 首先last表示扫描到last这个点了,val[x]表示x到last中的最小值,sum[x]表示last分别等于1,2,3....
阅读全文
摘要:学到了线段树新姿势! 先离线读入,根据时间建一棵线段树,每个节点上开一个vector存这个区间内存在的数(使用map来记录每个数出现的一段时间),然后在线段树上dfs,到叶子节点就计算答案。 注意!!从父节点带下来的线性基数组一定要放在函数里传给子节点!全局变量就会多出好多东西!~~这个其实是常识吧
阅读全文
摘要:这个代码已经不是写丑那么简单了……脑子浆糊感觉np++分分钟想暴起打死我……就这还一遍A过了…… 先都读进来hash一下,因为是平衡树所以dfs序直接按照点值来就好 对于每个操作: 1:set维护已插入的值,对新加入的x找到它的前驱后继,选深度大的挂上去(画图找规律,我也不知道为什么深度较浅的一定挂
阅读全文
摘要:首先,如果没有换根操作的话,那么这就是一个普通的树链剖分。 先按照以1为根进行树链剖分,用线段树维护最小值。现在考虑换根操作,设当前根为root,查询的子树根节点为想,会发现有如下三种情况: \\( root=x \\),相当于求全区间和,直接返回即可; x在root的子树中,那么换根对它没有影响,
阅读全文
摘要:%.8lf会WA!!%.8lf会WA!!%.8lf会WA!!要%.10lf!! 和4817有点像,但是更复杂。 首先对于操作一“在编号为x的计算机中植入病毒的一个新变种,在植入一个新变种时,病毒会在局域网中搜索核心计算机的位置,并沿着网络中最短的路径感染过去”,长得是不是有点像LCT中的access
阅读全文