摘要:
莫队算法是由清华大学神牛莫涛发明的一种处理区间问题的离线算法 算法核心是通过先将问询区间总长度平方分块、然后将所有的问询区间按照左端点所在的块编号排序、在同一块内的则按右端点升序 然后设置左右两个下标指针、每次都移动两个指针指向问询块的左右端点、在移动的过程中不断维护答案。 可以证明原本只通过两个下 阅读全文
摘要:
题目链接 题意 : 给出坐标轴上的 n 个点的横坐标,要你选出最多的点,使得这些点两两距离是二的幂 ( 特殊情况 : 选出的集合只有一个点也满足条件 ) 分析 : 官方题解已经说的很好了 最关键是是判断选出的集合元素数量肯定不可能大于 3 简单翻译一下题解就是 假设现有答案集合元素数量为 4 ,且令 阅读全文
摘要:
LCA 有几种经典的求取方法、这里只给出模板,至于原理我完全不懂。 1、RMQ转LCA、复杂度O(n+nlog2n+m) 大致就是 DFS求出欧拉序 => 对欧拉序做ST表 => LCA(u, v) 即为 u、v 最先出现在欧拉序中的编号之间的最小值。 因为 LCA 的子树中必定有一个节点是 u,一 阅读全文
摘要:
LL inv[maxn];inline void inv_init(){ inv[0] = inv[1] = 1; for(int i=2; i<maxn; i++) inv[i] = (LL)(mod - mod / i) * inv[mod % i] % mod;} 阅读全文
摘要:
CDQ分治是种离线的分治算法 通常解决带有修改和问询且不强制在线的一类问题 本人菜鸡,就只能推推文章这样子 ==> CDQ分治 说一些点 ① CDQ的优点就是能起到降维的作用,从而顶替了本应多套一层数据结构才能维护的信息 具体点来说就是“消除了某一维”的影响、例如在解决三维偏序的过程中,先根据a、b 阅读全文
摘要:
题目链接 题意 : 给出一个 n * m 的矩阵,用规格 1 * 2 的多米诺去填充,题目数据保证最后只有一个格子是空白的(即没有被多米诺骨牌覆盖),问你现在通过移动多米诺能够产生多少种不同的状态(空白位置作为状态依据,所以最多只有 n * m 种状态) 分析 : 这题看着很吓人,一般来说不会想到直 阅读全文
摘要:
题目链接 题意 : 给出一个排列,让你删除一个数,使得删除后整个序列的 Good 数数量最多。Good 数的定义为 若 Ai 为 Good 则存在 Aj < Ai ( j < i ) 分析 : 画画几个规律就能得出如下几个结论 ① 若删除一个 Good 数,则原序列 Good 数的数量只会减一,即只 阅读全文
摘要:
题目链接 题意 : 中文题 分析 : 价值和重量都太过于大,所以采用折半枚举的方法,详细可以看挑战的超大背包问题 由于 n <= 30 那么可以不必直接记录状态来优化,面对每个用例 直接采用递归回溯的方法来写这个 DP 即可 #include<bits/stdc++.h> #define LL lo 阅读全文
摘要:
题目链接 题意 : 给出 N 堆石子,每次可以选择一堆石子拿走任意颗石子,最后没有石子拿的人为败者。现在后手 Bob 可以在游戏开始前拿掉不超过 d 堆的整堆石子,现在问你有几种取走的组合使得 Bob 能保证他在游戏开始后是必胜的。 分析 : 在没有附加规则,即 Bob 可以先取走某些堆的情况下 就 阅读全文
摘要:
题目链接 分析 : 发现如果一开始就在边界或者位于对角线的位置上肯定是必胜态 从终点逆推,画出胜负表格,填一填,就会发现和奇异局势的前几项一样 然后打个奇异局势的表就能 AC 了 #include<bits/stdc++.h> #define LL long long #define ULL uns 阅读全文