【暑假集训模拟DAY3】数据结构
前言
数据结构...原本以为都是树状数组线段树,单调队列,并查集(其实也有)往上堆,但是看题居然没感觉和数据结构有太大关系
原本预计T1”秒切”,然而经过长达3h的思考后后面写了三个暴力(还因为常数大和 lj评测机挂了15pts)
总分:70pts(直接垫底)
题解
T1forward
链表写挂的只有我一个。说实话一开始还有点沾沾自喜,但是确实很久不写链表,到底挂了,主要是因为 lst 数组更新的时候忘记更新 lst[nxt[x]]=lst[x],lst[fir]=x这样的操作
实际发现根本不用这么复杂,什么双端队列,什么反着输入操作,乱搞都能过
这题挂了属实亏
T2basket
自古T2难度大
想了很长时间各种的贪心,优先队列等等,最终打了爆搜
正解的枚举有点神仙,而且最后的30分才需要线段树维护等等...
T3manage
想了很久并查集,建图的操作,但是始终思路跳不出去
根本没想到正解:按照时间建边,倍增维护路径最大值,把询问离线处理
这道题告诉我,在树上的倍增基本是dfs的时候处理一遍,不会有边加边边处理或者修改的情况
我觉得不简单。。。
不过这道题告诉我:离线处理询问有很大的好处!(而且要注意数组大小和下标不要越界...)
T4square
暴力显然很好想:枚举每个点二分,维护二维前缀和写二分的check函数
正解:时间逆流操作,把放障碍物的操作变成把障碍物拿走的操作,如果有更大的矩阵那么一定经过改变的点,对于一行,枚举右端点 r ,用单调队列分别维护该行向上,向下的高度最小值,可以确定出左端点