随笔分类 - 题库—洛谷
摘要:题意 "题目链接" Sol 一条重要的性质:如果某个区间覆盖了另一个区间,那么该区间是没有用的(不会对最大值做出贡献) 首先不难想到枚举最终的答案$x$。这时我们需要计算的是最大值恰好为$x$的概率。 发现不是很好搞,我们记$P(x)$表示最大值$\leqslant x$的概率,那么恰好为$x$的概
阅读全文
摘要:题意 "题目链接" Sol 动态dp板子题。有些细节还没搞懂,待我研究明白后再补题解。。。 cpp include define LL long long using namespace std; const int MAXN = 1e5 + 10, INF = INT_MAX; template
阅读全文
摘要:题意 "题目链接" Sol ~~每当出题人想起他出的HNOI 2018 Day2T3,他都会激动的拍打着轮椅~~ 读题比做题用时长系列。。。 $f[i][a][b]$表示从根到$i$的路径上,有$a$条公路未被翻修,$b$条铁路未被翻修 然后xjb转移一下 比较好奇为啥不会MLE.. cpp inc
阅读全文
摘要:题意 "题目链接" Sol 首先猜一个结论:对于每次询问,枚举一个起点然后不断等到某个点出现时才走到下一个点一定是最优的。 证明不会,考场上拍了3w组没错应该就是对的吧。。。 首先把数组倍长一下方便枚举起点,然后就是一个单调队列的模型了。整理一下我们需要求的东西就是这个 $$n 1 + \min_{
阅读全文
摘要:题意 "题目链接" Sol 神仙题Orz Orz zbq爆搜70。。 考虑"与"和"或"的性质 $0 \& 0 = 0, 1 \& 0 = 0$ $0 \mid 1 = 1, 1 \mid 1 = 1$ 也就是说某一个数$\& 0$之后不管之前是什么,现在的值变为$0$ 某一个数$\mid 1$之后
阅读全文
摘要:题意 "题目链接" Sol 线段树合并板子题,目前我看到两种写法,分别是这样的。 前一种每次需要新建一个节点,空间是$O(4nlogn)$ 后者不需要新建,空间是$O(nlogn)$(面向数据算空间你懂得),但是需要离线,因为共用节点的缘故,之后的修改可能会修改到不需要修改的节点(好绕啊); 这题就
阅读全文
摘要:题意 "题目链接" Sol 说一个后缀自动机+线段树的无脑做法 首先建出SAM,然后对parent树进行dp,维护最大次大值,最小次小值 显然一个串能更新答案的区间是$[len_{fa_{x}} + 1, len_x]$,方案数就相当于是从$siz_x$里面选两个,也就是$\frac{siz_x (
阅读全文
摘要:题意 "题目链接" Sol 暴力做法是$O(n^3)$枚举三个点然后check一下是否能包含所有点 考虑一种随机算法,首先把序列random_shuffle一下。 然后我们枚举一个点$i$,并维护一个当前的圆。 再枚举一个点$j$,如果该点在圆内继续,否则用$i, j$构造出的圆替换出之前的圆。 再
阅读全文
摘要:题意 "题目链接" Sol 我的做法比较naive。。首先manacher预处理出以每个位置为中心的回文串的长度。然后枚举一个中间位置,现在要考虑的就是能覆盖到i 1的回文串中 中心最靠左的,和能覆盖到i+1中 中心最靠右的,算一下答案取个max。 线段树维护一下区间min, max。标记永久化炒鸡
阅读全文
摘要:题意 "题目链接" Sol 设$f[i][j]$表示枚举到位置串的第i位,当前与未知串的第j位匹配,那么我们只要保证在转移的时候永远不会匹配即可 预处理出已知串的每个位置加上某个字符后能转移到的位置,矩阵快速幂优化一下 复杂度$O(M^3 \log n)$ cpp include using nam
阅读全文
摘要:题意 "题目链接" Sol 首先不难想到一种暴力dp,设$f[i][a][b][c]$表示还有$i$轮没打,场上有$a$个1血,$b$个2血,$c$个三血 发现状态数只有$s = 166$个,复杂度为$O(ns)$ 矩乘优化一下复杂度为$O(s^3 logn T)$,还是过不去。 因为每次询问都是独
阅读全文
摘要:题意 "题目链接" Sol 异或高斯消元的板子题。 bitset优化一下,复杂度$O(\frac{nm}{32})$ 找最优解可以考虑高斯消元的过程,因为异或的特殊性质,每次向下找的时候找到第一个1然后交换就行,这样显然是最优的 cpp include using namespace std; co
阅读全文
摘要:题意 "题目链接" Sol 不会卡常,自愧不如。下面的代码只有66分。我实在懒得手写平衡树了。。 思路比较直观:拿个set维护每个数出现的位置,再写个线段树维护区间和 cpp include define LL long long const int MAXN = 5e5 + 10, INF = 1
阅读全文
摘要:题意 "题目链接" Sol ODT板子题。 操作1直接拆区间就行。 cpp include define fi first define se second const int MAXN = 2e5 + 10; using namespace std; inline int read() { cha
阅读全文
摘要:题解 题意 "题目链接" Sol ODT板子题..... cpp // luogu judger enable o2 include define LL long long define Fin(x) freopen( x".in", "r", stdin); define Fout(x) freo
阅读全文
摘要:题意 "题目链接" Sol 为什么一堆分块呀。。三维数点不应该是套路离线/可持久化+树套树么。。 亲测树状数组套权值线段树可过 复杂度$O(nlog^2n)$,空间$O(nlogn)$(离线) cpp include define Pair pair define MP(x, y) make_pai
阅读全文
摘要:题意 "题目链接" Sol 别问我为什么发两遍 ~~就是为了骗访问量~~ 这个题的线段树做法,,妙的很 首先一个显然的结论:位置$i$能被看到当且仅当$\frac{H_k}{k} mx_{rs}$,那么右孩子的答案为0。 否则考虑右孩子的左孩子的贡献,如果$mx_{rs_{ls}} mx_{ls}$
阅读全文
摘要:题意 "题目链接" Sol 从上午九点淦到现在qwq 思路比较简单,就是把每次加入的一坨点看成一个,然后直接倍增搞。。 然后慢慢调就可以了。。。 最后数量级会到达$10^{10}$,所以应该开long long cpp include define Pair pair define MP make_
阅读全文
摘要:题意 "题目链接" Sol 很傻x的题。。 c才100, n, m才300,直接开100个二维树状数组就做完了。。 cpp include using namespace std; const int MAXN = 301; inline int read() { char c = getchar(
阅读全文
摘要:题意 "题目链接" Sol 显然整个序列的形态对询问没什么影响 设权值$ =s$的有$k$个。 我们可以让这些数每次都被选择 那么剩下的数,假设值为$a_i$次,则可以$a_i$次被选择 一个显然的思路是每次选最大的C个 那么只需要判断$\sum a_i =(c k) s$即可 权值线段树维护一下
阅读全文

浙公网安备 33010602011771号