寒假学习记录

2022.1.16#

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

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

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

(rl+1)×mini=lrh(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,也可以进行单调队列优化,将数据按 %wi 的余数分组,体积为 u,u+wi,u+2wi.... 然后对于每一组考虑状态转移方程:

F(1,u+kwi)=maxj=0kF((0,u+(kj)wi)+jvi)

g(k)=F(0,u+kwi)kvi ,则

F(1,u+kwi)=maxj=rkr(g(j))+kvi

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

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

f[t][x][y]=max(f[t1][x][y],f[t1][xdx[d[i]]][ydy[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[k1]+maxj=kih[j])(j=kih[j]m)

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

Li=lraiR

用前缀和表示即为

Lsum[r]sum[l1]R

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

2021.1.20#

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

[fi1,fi2]×[1110]=[fi,fi1]

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


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

2022.1.21#

今日学习:树状数组
P3374 【模板】树状数组 1 P3368 【模板】树状数组 2
P3372 【模板】线段树 1
直接套树状数组模板即可
我不会告诉你我是用线段树水的
CF652D Nested Segments
包含的含义是使得 l1l2r2r1,所以我们可以按右端点排序,这样可以满足 r 的条件,所以就只要满足 l1l2 即可。我们可以枚举右端点,观察到 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 @   sheeplittlecloud  阅读(59)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示
主题色彩