Loading

寒假学习记录

2022.1.16

今日学习:单调栈,单调队列,堆

DS_problem 1 游戏1
单调栈水题,倒序枚举维护一个单调栈即可。

DS_problem 03
枚举以行为底的1最大向上拓展数量,设为 \(h(x)\) ,则 \(l\)\(r\) 的矩阵面积最大值为

\[(r-l+1)× \min^{r}_{i=l} h(i) \]

用单调栈维护即可。

DS_problem 04
用一个 \(l\) 数组和 \(r\) 数组枚举左右,求和使用前缀和即可。

DS_problem 06 滑动窗口
单调队列水题
用ST表水过了

DS_problem 07 游戏6
横纵做2遍单调队列即可。

DS_problem 8 荷马史诗
其实就是 \(k\) 叉哈夫曼树问题。利用贪心求解即可。

2022.1.17

今日学习:单调栈,单调队列,堆

P1901 发射站
单调栈水题,维护一个单调递减的栈,每次输入数据判定高度是否大于栈顶,大于便加上价值。最后入栈。
P1950 长方形
与problem3类似,直接枚举以行为底的全'.'子矩阵即可
P4779 【模板】单源最短路径(标准版)
dijkstra堆优即可
P1776 宝物筛选
可以直接打多重背包板子AC,也可以进行单调队列优化,将数据按 \(\%w_i\) 的余数分组,体积为 \(u,u+w_i,u+2w_i....\) 然后对于每一组考虑状态转移方程:

\[F(1,u+kw_i)=\max^{k}_{j=0} F((0,u+(k-j)w_i)+jv_i) \]

\(g(k)=F(0,u+kw_i)-kv_i\) ,则

\[F(1,u+kw_i)=\max_{j=r-k}^r(g(j))+kv_i \]

上面就是一个滑动窗口,直接上单调队列即可。
P2254 NOI2005 瑰丽华尔兹

暴力dp可以直接水过?
状态转移方程:

\[f[t][x][y]=max(f[t-1][x][y],f[t-1][x-dx[d[i]]][y-dy[d[i]]]) \]

2022.1.18

今日学习:并查集,带权并查集,种类并查集
abs讲课!
P3367 【模板】并查集
直接套并查集模板即可
P5937 [CEOI1999]Parity Game
很有思维的一题。可以用种类并查集或者带权并查集做。带权并查集就是将区间转换为一棵树,边权表示奇偶,将节点到根节点所经过的所有的节点异或即可判断奇偶
UVA11987 Almost Union-Find
操作1和操作3很好想,直接最基础的并查集操作,而操作二则会影响到自己的子节点,所以我们可以建立一个虚节点,作为每个集合的父节点,这样操作的时候不会影响到子节点,剩余就很好想了
P2024 [NOI2001] 食物链
像P5953一样,可以用2中方法做。本人用的带权并查集,吃与被吃的关系可以用%3的关系式来推出。当然种类并查集就是分成三组然后判断每组中有没有谎话。
P3420 [POI2005]SKA-Piggy Banks
将每个存钱罐向此存钱罐里的钥匙可打开的存钱罐连边,最后判断联通块的个数即可。判断操作可用并查集判断
P3465 [POI2008]CLO-Toll
题意就是构造一个的基环树,保证只有一个环,直接魔改kruskal构造一棵基环树,用并查集维护即可
P3631 [APIO2011]方格染色
写出来会写题解的

2022.1.19

今日学习:线段树(自己顺带学了一下树状数组和cdq分治
P3372 【模板】线段树 1
直接套线段树板子即可
P3373 【模板】线段树 2
线段树板子,注意先乘后加,开两个lazy数组即可
P1295 [TJOI2011]书架
正解是线段树优化dp,但暴力dp可以直接水过。设 \(dp[i]\) 表示前 \(i\) 本书已经放好,枚举区间开头 \([k,i]\) 即可列出状态转移方程:

\[dp[i]=min(dp[i],dp[k-1]+ \max^{i}_{j=k}h[j] )(\sum^{i}_{j=k}h[j]≤m) \]

初始化\(dp[0]=0\)
P5459 [BJOI2016]回转寿司
题意即求在 \([1,n]\) 中选一段连续子序列 \([l,r]\) 使得

\[L≤\sum^{r}_{i=l}a_i≤R \]

用前缀和表示即为

\[L≤sum[r]-sum[l-1]≤R \]

推到这里有2种做法
第一种是移项得 \(sum[r]-R≤sum[l-1]≤sum[r]-L\),离散化后直接树状数组维护即可
第二种是根据原式可得 \(sum[r]-sum[l-1]≥L\)\(sum[r]-sum[l-1]≤R\) ,这个式子就很归并排序,直接用CDQ分治即可

2021.1.20

今日学习:线段树
P4041 [AHOI2014/JSOI2014]奇怪的计算器
线段树题,因为是全局操作,所以可以直接从小到大排序,所以小于 \(L\) 的一定在序列左侧,\(R\) 同理
然后由于是全局操作,所以可以直接打标记
可以用一个结构体存序列的编号,初始值和答案,先按初始值排序,算出答案后按编号排序输出即可
就是码量有点大
CF718C Sasha and Array
不难发现,\(f\) 序列就是斐波那契数列,而斐波那契数列可以用矩阵来维护

\[\begin{bmatrix} f_{i-1},f_{i-2} \end{bmatrix} \times \begin{bmatrix} 1 &1 \\ 1 &0 \end{bmatrix} = \begin{bmatrix} f_{i},f_{i-1} \end{bmatrix}\]

因为矩阵满足分配率,所以一段区间可以相加维护,所以操作一便解决了。而操作二就是将 \([l,r]\) 乘上 \(\begin{bmatrix} 1 &1 \\ 1 &0 \end{bmatrix}^k\)即可.可以用线段树维护,每个叶子结点维护一个矩阵
CF413E Maze 2D
用线段树维护 \([l,r]\) 区间左端到右端的最小值即可
P2605 [ZJOI2010]基站选址
不会,会了会来写的


顺便记录一下线段树的时间复杂度:
单点修改,查询类函数调用次数:\(\mathcal{O}(mlog\) \(n)\)
区间修改,查询类函数调用次数:\(\mathcal{O}(2mlog\) \(n)\)
pushup函数调用次数:\(\mathcal{O}(mlog\) \(n)\)
pushdown函数调用次数:\(\mathcal{O}(mlog\) \(n)\)

2022.1.21

今日学习:树状数组
P3374 【模板】树状数组 1 P3368 【模板】树状数组 2
P3372 【模板】线段树 1
直接套树状数组模板即可
我不会告诉你我是用线段树水的
CF652D Nested Segments
包含的含义是使得 \(l_1≤l_2≤r_2≤r_1\),所以我们可以按右端点排序,这样可以满足 \(r\) 的条件,所以就只要满足 \(l_1≤l_2\) 即可。我们可以枚举右端点,观察到 \(l\) 很大,所以可以将 \(l\) 离散化,然后丢进树状数组里乱搞就行了
SP3267 DQUERY - D-query
莫斯科战队莫队板子题,直接水过去

2022.1.22

考试日
T1 长方形
原题,对于每一行用一个单调队列,记录每一列向上可扩展多少
T2 飞行员
维护一个单调的单调队列,每次加入元素判断头和尾是否满足条件,如果不满足则出队,记录队列最长长度即可
T3 图的删除
带全并查集维护,多建一个父节点即可
T4 简单题
题如其名
真·只能用树状数组不能用线段树

2022.1.23 - 2022.1.24

学习:LCA,树链剖分求LCA,倍增求LCA,RMQ求LCA,树的直径,差分
P3379 【模板】最近公共祖先(LCA)
模板题,可以用倍增和树链剖分来做
P3128 [USACO15DEC]Max Flow P
树上差分,求每条边经过次数的最大值
P6869 [COCI2019-2020#5] Putovanje
还是树上差分,求出每条边的经过次数后枚举每条边,看买那种票合算,最后直接加答案即可
P3258 [JLOI2014]松鼠的新家
改一下P3128即可
P6374 「StOI-1」树上询问
写出来来写
P3384 【模板】轻重链剖分/树链剖分
模板题,树链剖分求LCA稍微改一下,加几个操作即可
P3899 [湖南集训]更为厉害
写出来来写

2022.1.25

今日学习:最短路,tarjan
好多题没写。。。不想写,到时候过一段时间来补吧
咕了

2022.1.26

今日学习:最小生成树,kruskal生成树
P3366 【模板】最小生成树
直接套最小生成树模板即可,kruskal和Prim都可以
P2330 [SCOI2005]繁忙的都市
题意就是最小化最大边权的生成树,直接套kruskal板子即可
P1265 公路修建
由题可得,2操作是没用的,所以我们只用考虑1操作,然后直接建一个完全图,用勾股求边权,最后跑Prim就可以了
P1967 [NOIP2013 提高组] 货车运输
可以建树后操作,用kruskal跑一棵最大生成树,再用LCA求出路径即可

posted @ 2022-01-20 20:48  sheeplittlecloud  阅读(56)  评论(0编辑  收藏  举报