06 2021 档案

该文被密码保护。
posted @ 2021-06-28 19:18 __Anchor 阅读(0) 评论(0) 推荐(0)
摘要:题目 给定n,k和一个长度为n的序列,求最长的最大值最小值相差不超过k的序列 分析 可以直接双指针+RMQ来维护,复杂度是 \(O(nlogn)\) 的(约束RMQ爬)。 这里讲一个单调队列的思路。 维护两个单调队列,一个单调上升,一个单调下降。 然后每加入一个元素先更新两个队列,然后看一下两个队首 阅读全文
posted @ 2021-06-25 20:34 __Anchor 阅读(98) 评论(0) 推荐(1)
摘要:题目 给定一个无向图,保证从1号点到所有点的最短路只有一条,现在对于每一个点询问:如果把1号点到这个点的最短路径的最后一条边断掉,那么到这个点的最短路变成了多少? 分析 首先我们发现最短路只有一条,其实就是在提示我们建出最短路树。 那么现在每一条树外面的边其实就有各自的贡献,对于一条边,它可以更新$ 阅读全文
posted @ 2021-06-25 20:28 __Anchor 阅读(73) 评论(0) 推荐(0)
摘要:题目 分析 析合树模板题的加强,变成了每次区间询问。 考虑容斥,也就是我们这里只要算中间被完全包含的那一段区间的所有子树和左右边界的右左的一部分。 具体见题解。 代码 #include<bits/stdc++.h> using namespace std; template<typename T> 阅读全文
posted @ 2021-06-25 20:14 __Anchor 阅读(77) 评论(0) 推荐(0)
摘要:题目 分析 析合树题。 首先这样“每行每列恰好一个棋子”的条件是很明显的说这是一个排列。 然后$k\times k$的矩阵这个条件再分析一下就容易得出这是指我们需要找出一个连续区间。 那么把矩阵转化成数组,然后就是析合树模板题了。 代码 #include<bits/stdc++.h> using n 阅读全文
posted @ 2021-06-25 20:11 __Anchor 阅读(64) 评论(0) 推荐(0)
摘要:题目 分析 析合树模板题。 先建出析合树。 就是要统计这样的点对的个数,那么在析合树上其实就是对于每一个点这样统计: \(1.\) 对于合点:任意两个儿子之间可以任意选择,那么方案加上 \(num\times (num-1)/2\) \(2.\) 对于析点:任何两个儿子都不能选,于是只有它本身这个节 阅读全文
posted @ 2021-06-25 20:08 __Anchor 阅读(79) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-06-25 16:48 __Anchor 阅读(0) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-06-25 09:34 __Anchor 阅读(0) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-06-23 23:26 __Anchor 阅读(0) 评论(0) 推荐(0)
摘要:题目 给你两个整数N和K,要求你输出N!的K进制的位数。 对于100%的数据,有2≤N≤2^31, 2≤K≤200,数据组数T≤200。 分析 发现其实就是让我们求 \(\log_k{n!}\) 的位数。 暴力求就是 \(ans=\log_k{1}+\log_k{2}+\log_k{3}+...+\ 阅读全文
posted @ 2021-06-20 08:35 __Anchor 阅读(245) 评论(0) 推荐(0)
摘要:前言 \(trie\) 树一般用于处理前缀字符串的匹配问题,但是其实在字符串问题上的作用并不大,一般都是拿来转化的。 \(01trie\) 可以用来维护异或最大值,同时也多出现在位运算的场合,尤其是按位贪心等技巧,需要在 \(01trie\) 上二分等,需要掌握。 众所周知,绝大多数复杂度不基于均摊 阅读全文
posted @ 2021-06-19 17:35 __Anchor 阅读(602) 评论(0) 推荐(0)
摘要:前言 可持久化数据结构其大多数有两种用法,但是其本质都是维护了一个“前缀数据结构”。 第一种用法是对于可以差分的信息(不只是序列上的差分,也可以是树上差分),我们就可以直接通过“前缀和”相减来得到对应区间的信息,从而维护。 第二种用法比较纯粹,就是在我们需要访问这个数据结构每一个历史版本的时候,我们 阅读全文
posted @ 2021-06-18 21:07 __Anchor 阅读(260) 评论(0) 推荐(3)