摘要:
解决问题: 这类问题一般是给你一个长度为 n 的序列,然后让你统计有一些特性的点对(i,j)有多少个,又或者说是找到一对点(i,j)使得一些函数的值最大之类的问题 算法流程: 找到当前序列中点mid 将所有的点分为三类 第一种是$1\leq i\leq mid\ 1\leq j\leq mid$ 第 阅读全文
摘要:
111 阅读全文
摘要:
我们先从一道经典的例题入手: [SDOI2011]消耗战 题意: 给出一棵树,每条边有边权。 有m次询问,每次询问给出k个点,问使得这k个点均不与1号点(根节点)相连的最小代价 \(1\leq n\leq 2.5\times 10^5,1\leq m\leq 5\times 10^5,1\leq \ 阅读全文
摘要:
整体二分的定义: 在信息学竞赛中,有一部分题可以使用二分的办法来解决。但是当这种题目有多次询问且每次询问我们对每个查询都直接二分,可能会收获一个 TLE。这时候我们就会用到整体二分。整体二分的主体思路就是把多个查询一起解决。(所以这是一个离线算法) 可以使用整体二分解决的题目需要满足以下性质: 询问 阅读全文
摘要:
一、线段树合并的思想 线段树合并,顾名思义,就是建立一棵新的线段树保存原有的两颗线段树的信息。 二、线段树合并的流程 假设我们合并到了两棵树的pos位置 如果a有pos位置,b没有,那么新的线段树pos位置赋成a,返回 如果b有pos位置,a没有,赋成b,返回 如果此时已经合并到两棵线段树的叶子节点 阅读全文
摘要:
解决问题: 猫树是解决无修改区间或树上询问的高效算法. 对于常规问题,比如区间最值,区间最大子段和。我们常常能用线段树等数据结构达到,构造 O(n),询问 O(logn)的时间复杂度。 对于这些做法,只有一点不好,询问复杂度 不够优秀,且对于一些特定问题,线段树的push_up合并也不好写。 但对于 阅读全文