随笔分类 - 数据结构-----线段树
摘要:一、题目 点此看题 二、解法 真的好题啊,我这个垃圾感受到了思维的锤炼。 一开始我想的是做单调栈,我们维护一个递减的单调栈,每次插入一个数就把权值小于它的元素合并到一起,定义合并元素的权值为原来所有元素的权值最小值,连通块个数就是最后栈中元素个数。 显然单调栈是动态维护不了的,但是我们可以从中看出一
阅读全文
摘要:一、题目 点此看题 二、解法 ~~这道题其实很清真的啊,我怎么做不出来呢?~~ 首先有一个 $\tt observation$:最小碰撞只会发生在相邻两个粒子的碰撞中。 相邻两个粒子只有三种碰撞情况,我们先把它讨论出来。然后考虑枚举产生最小碰撞时间的是某个碰撞组合,导致的限制是时间比它小的碰撞组合不
阅读全文
摘要:一、题目 点此看题 二、解法 线段树分裂真鸡巴快,就是有点费脑子。 首先把原序列看成若干个有序段的排列,那么操作就相当于把边界上的有序段拆分,然后把中间的所有有序段合并起来。具体实现中我们用 \(\tt set\) 来添加断点,用线段树分裂来处理边界上的有序段,然后用线段树合并把区间涉及到的有序段全
阅读全文
摘要:一、题目 点此看题 二、解法 \(\tt oneindark\) 真的离谱,这种题都能切呢?\(3300\) 的题都能切呢?! 首先我们应用 \(01\) 原则,\(\forall i\),我们把前 \(i\) 小的数变成 \(0\),剩下的数变成 \(1\),然后对这个数列排序,所有排序次数取最大
阅读全文
摘要:一、题目 点此看题 二、解法 首先题目的限制显然可以转成若干偏序关系: 如果 \(a_i=-1\),那么找到所有未被标记的 \(j\in[1,n]\),把 \(j\) 向 \(i\) 连一条边,表示 \(p_j<p_i\) 如果 \(a_i\not=-1\),那么找到所有未被标记的 \(j\in[1
阅读全文
摘要:一、题目 点此看题 二、解法 线段树分治可以解决在线插入难,在线删除难,回退难的问题。 就好比我们只会凸包的离线插入,那么在线段树上的每一个节点上维护一个凸包,然后去更新它管辖区间的所有询问即可,每个询问只会被更新 \(\log\) 次所以复杂度是对的。 忘了说这道题为什么要用凸包了,对于询问 \(
阅读全文
摘要:区间最值操作 题目描述 点此看题 维护一个数据结构支持区间取最小值,查询区间最大值,查询区间和。 解法 线段树上每个节点维护 \(mx\) 表示区间最大值,\(cx\) 表示区间严格次大值,对于修改我们这样做: 如果 \(mx\leq t\),那么忽略这次取最小值的操作。 如果 \(mx>t>cx\
阅读全文
摘要:一、题目 点此看题 二、解法 宋队写矩阵直接 \(\tt T\) 飞了,这么多操作好像势能线段树也很难$...$ \(\tt observation\):对于最难搞的二操作,新的值是关于原来值的只有一个折点的折线函数。 那么我们尝试维护函数 \(f(x)=\max(x+a,b)\),对于前三种操作,
阅读全文
摘要:一、题目 点此看题 二、解法 第一次过历史线段树的题,写篇题解纪念一下 核心思想就是将标记看作一个操作序列,我们需要额外维护一个序列前缀最大值。 具体来说:我们维护 icv,cv,hcv 表示是否被覆盖$/\(当前的覆盖标记\)/\(历史覆盖标记最大值;维护 `ad,had` 表示当前的加法标记\)
阅读全文
摘要:一、题目 点此看题 二、解法 首先根据农民伯伯都会的排序不等式(因为他们知道把最好的菜种进最好的地里),贪心策略是把人和马都按照权值大小排序,然后对应位相乘求和就行了,不难证明这是最优的匹配方案。 但是因为本题有第 \(i\) 个人不能和第 \(i\) 匹马配对的限制,所以说不一定取得到最优方案。这
阅读全文
摘要:D.Inc,Dec-Decomposition 题目描述 点此看题 给一个长度为 \(n\) 的 \(A\) 序列,试构造单调不降的 \(B\) 和单调不增的 \(C\),满足 \(a_i=b_i+c_i\) 并且最小化代价: \(\sum_{i=1}^n|b_i|+|c_i|\) \(n\leq
阅读全文
摘要:操作 题目描述 点此看题 解法 分裂有点难,但是发现分裂第一堆石子就相当于合并第二堆石子,问题就转化为两堆石子都能合并,最后达到相同的状态。 全部合并成一堆石子答案是 \(n+m-2\),考虑第一堆石子的某个子集和跟第二个子集的某个子集和相等,答案就能减少 \(2\),那么设计 \(dp[s]\)
阅读全文
摘要:一、题目 点此看题 二、解法 首先选子树为 \(dp\) 主体,但是考虑没有时间做不动,我们假设子树 \(u\) 是在时间 \(i\) 被断开的,也就是断开操作是由于 \(u\) 的祖先引起的。设 \(dp[u][i]\) 表示子树 \(u\) 在 \(i\) 时间内被断开最后能得到的最大果汁,转移
阅读全文
摘要:一、题目 点此看题 二、解法 设 $dp[i]$ 表示把 $[1,r_i]$ 都治好的最小代价。注意这个状态并没有特殊限制时间,我们只需要保证最后所有人能被治好就行了。 我再进一步地解释这个状态,你可能会说这个状态很奇怪,我不一定要先治疗一个前缀,可以先从中间治起。那么你的说法是对的,所以我再三强调
阅读全文
摘要:一、题目 点此看题 二、解法 注意题目问的是区间啊,我以为是子序列就一直做不起。 \(d=0\) 特判,然后我们只考虑连续的$\bmod d$ 余数相同的一段,现在翻译一下题目条件: \([l,r]\) 中不出现相同的数。 \(\frac{\max[l:r]-\min[l:r]}{d}\leq k+
阅读全文
摘要:逆序对 题目描述 点此看题 解法 显然不能直接去算逆序对个数,要不然只有操作壹都要用树套树 找规律发现操作壹一定会改变逆序对的奇偶性,这是因为交换相邻的两个数一定会改变原序列的奇偶性,交换 \(a_l,a_r\) 可以用 \(2\cdot (r-l)-1\) 次相邻交换完成,所以逆序对奇偶性一定改变
阅读全文
摘要:一、题目 点此看题 二、解法 想了好久这结论终于自己整出来了,开心。 你看这题 \(dp\) 稳超时,而且又没有什么好的贪心方法,不妨先建出网络流模型。 显然可以费用流,建 \(n+1\) 个点,相邻两个点之间连有向边,费用为 \(a_i\) 流量为 \(1\),每个点都连源汇点,然后搞个限 \(k
阅读全文
摘要:一、题目 点此看题 二、解法 \(\tt ZJOI\) 真有意思! 首先思考一下部分分吧,对于 \(20\) 分的 \(\tt subtask\) 满足原树是一条链,我们可以维护每个点为左端点最远覆盖到的右端点,用线段树求区间最大值然后把所有位置的贡献求个和即可,时间复杂度 \(O(n\log n)
阅读全文
摘要:人类智慧题,我觉得网上的题解大多讲的不清楚(导致我看了很久),我尽量把你讲懂。 一、题目 点此看题 二、解法 首先我观察了一下数据范围,\(d_i\) 互不相同的分有 \(50\%\),先指着这个想一想。可以把 \(i\) 和 \(\lfloor\frac{i}{k}\rfloor\) 连一条边,那
阅读全文
摘要:一、题目 点此看题 二、解法 有一个比较重要的性质:对于同一个 \(v\) 我们只需要取最深的 \(u\) 去考虑即可,而且可以在 \(v\) 处处理限制 \((u,v)\),但是我们可能并不会现在就解决这个限制,可能要留到祖先去解决,这正好符合我们树形 \(dp\) 留一部分问题留给祖先考虑的特征
阅读全文

浙公网安备 33010602011771号