洛谷P5280 [ZJOI2019]线段树】的更多相关文章

  https://www.luogu.org/problemnew/show/P5280 省选的时候后一半时间开这题,想了接近两个小时的各种假做法,之后想的做法已经接近正解了,但是有一些细节问题理不清楚(事实证明出来后再给我2个小时也还是没理清楚,只能说自己naive),而且也码不完,打了个20分暴力 参考资料:题解 首先,可以分开考虑各个点 对于每个点,考虑对于t次修改,每一次标记为启用或不启用(共有$2^t$种标记方案),其中有多少种标记方案使得这个点最后有tag 询问的答案就是每个点的答…
题面传送门 神仙 ZJOI,不会做啊不会做/kk Sooke:"这八成是考场上最可做的题",由此可见 ZJOI 之毒瘤. 首先有一个非常显然的转化,就是题目中的"将线段树分裂成两棵线段树",我们事实上大可不必真的把线段树一分为二,可以看作对于操作集合 \(S\) 的所有子集 \(S'\subseteq S\) 计算出执行 \(S'\) 中的操作后线段树上有多少个节点 tag 为 \(1\). 其次建好线段树,我们考虑一次操作 \([l,r]\) 会对哪些节点产生影响…
传送门 无限Orz \(\color{black}S\color{red}{ooke}\)-- 思路 显然我们不能按照题意来每次复制一遍,而多半是在一棵线段树上瞎搞. 然后我们可以从\(modify\)函数入手,寻找一些性质. (盗一张Sooke的图) 可以发现每次\(modify\)之中,所有节点都可以被分成5类: 白色:经过而且标记全都被下传的点. 黑色:打上标记的点. 灰色:在修改区域内但不会被经过的点. 橙色:可以享受到来自上方标记的滋润的点. 黄色:半毛钱关系都没有的点-- 分类之后,…
题面 传送门 题解 考场上就这么一道会做的其它连暴力都没打--活该爆炸-- 首先我们得看出问题的本质:有\(m\)个操作,总共\(2^m\)种情况分别对应每个操作是否执行,求这\(2^m\)棵线段树上\(tag\)为\(1\)的节点个数 那么很明显得转化为每个节点在多少种情况里\(tag\)为\(1\) 对于一个操作\([ql,qr]\),我们把线段树上所有节点分成四类考虑 1.如果\(ql\leq l\&\&qr\geq r\),且该节点被访问到,那么不管之前操作序列怎么样,只要执行了当…
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格式: 第一行包含三个整数N.M.P,分别表示该数列数字的个数.操作的总个数和模数. 第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值. 接下来M行每行包含3或4个整数,表示一个操作,具体如下: 操作1: 格式:1 x y k 含义:将区间[x,y]内每个数乘上k 操作2: 格式:…
题目链接:洛谷 题目描述:[比较复杂,建议看原题] 这道题太神仙了,线段树上做树形dp. 根据树形dp的套路,都是按照转移的不同情况给节点分类.这里每次modify的时候对于节点的影响也不同,所以我们考虑分类. (这里借用一张图,%%%sooke大佬) 我们发现每次modify的时候对节点的影响有这5种节点.(因为每棵线段树的形态一致,所以我们只用一棵线段树) 一类点(白色):在 modify 操作中,被半覆盖的点. 二类点(深灰):在 modify 操作中,被全覆盖的点,并且能被遍历到. 三类…
送我退役的神题,但不得不说是ZJOIDay1最可做的一题了 先说一下考场的ZZ想法以及出来后YY的优化版吧 首先发现每次操作其实就是统计出增加的节点个数(原来的不会消失) 所以我们只要统计出线段树上每个节点在进行了\(t\)次操作(有\(2^t\)棵树)是某个点为\(1\)的总个数,令这个值为\(f_x\) 然后考场上用了一种记录该节点+左儿子+右儿子状态的方法,这样可以把答案的贡献全部算到这个点上 但是这样细节巨多且容易算重(漏),所以考场上码了\(200+\)行最后没调出大样例 后来想了一种…
[题目背景:] 滚粗了的HansBug在收拾旧数学书,然而他发现了什么奇妙的东西. [题目描述:] 蒟蒻HansBug在一本数学书里面发现了一个神奇的数列,包含N个实数.他想算算这个数列的平均数和方差. [输入格式:] 第一行包含两个正整数N.M,分别表示数列中实数的个数和操作的个数. 第二行包含N个实数,其中第i个实数表示数列的第i项. 接下来M行,每行为一条操作,格式为以下两种之一: 操作1:1 x y k ,表示将第x到第y项每项加上k,k为一实数. 操作2:2 x y ,表示求出第x到第…
[题目描述:] 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种有一棵树. 由于马路上有一些区域要用来建地铁.这些区域用它们在数轴上的起始点和终止点表示.已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分.现在要把这些区域中的树(包括区域端点处的两棵树)移走.你的任务是计算将这些树都移走后,马路上还有多少棵树. [输入格式:] 输入文件t…
[题目描述:] 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. [输入格式:] 输入一共有两行,第一行为n,k. 第二行为n个数(<INT_MAX). [输出格式:] 输出共两行,第一行为每次窗口滑动的最小值 第二行为每次窗口滑动的最大值 输入样例#: - - 输出样例#: - - - - 输入输出样例 [算法分析:]  线段树使用结构体同时维护区间最小值和最大值 没有修改只有建树和查询操…