CSP/NOIP之前的复健记录
写一些做题记录,题解和随机话。
看样子月考至少得有一个比较好看的成绩。
这回真是高一零基础学OI/文化课了。
- CF547B
考虑每一个数对答案的贡献。
自然是当这个数 \(a_i\)是所选的区间最小值时对答案有贡献,所以我们找到左边第一个比 \(a_i\) 大的数 \(a_l\) 和右边第一个比 \(a_i\) 大的数 \(b_i\),那么这个以 \(a_i\) 为最小值的区间长度最大是 \(r-1-(l+1)+1=r-l-1\)。
要求每一个长度 \(k\) 的区间的答案,发现一个长度为 \(len\) 的区间的答案同样对 \(k = [1,len-1]\) 的答案有贡献。类似差分的做法,对 \(ans\) 数组的 \(ans[len]\) 与当前答案取 max,然后做一遍后缀 max 即可。
求左/右边第一个比当前数大的数用单调栈来做,然后复杂度是线性的。
- AT_abc352_d
黄题都不会,退役吧。
考虑定义 \(a_i\) 表示 \(i\) 在原序列中出现的位置。
那么我们枚举所有的连续 \(k\) 个整数,发现答案是 \(a_i\) 的最大值减去 \(a_i\) 的最小值。
最大值减最小值做两遍滑动窗口即可,然后取 min。
- P7473
直接对所有可以到达的点之间连边是 \(n^4\) 的,空间和时间都难以接受。
发现在操作过程中,这两个位置都挨着边界或障碍物,于是我们只把挨着边界或障碍物的点进行连边,然后反向跑 bfs。
具体实现是先给所有需要建边的点编号,对于所有需要建边的点,先预处理出它四个方向所能到的点的编号,然后反向连边。
bfs 的队列是一个 pair,表示两个位置的编号,然后 \(dist_{i,j}\) 表示从编号 \(i\) 到编号 \(j\) 的操作数,初始化正无穷,\(dist_{i,i}=0\)。
计算答案首先要先把初始的位置给变成两个有编号的位置,即让这两个位置进行一次操作让它们都挨着边界或障碍物,然后对四个方向取 min。
- AT_abc426_d
分全变成 \(0\) 和全变成 \(1\) 两种情况考虑。
下面只考虑变成 \(0\) 的情况。
一个比较显然的结论:从两边开始操作,如果是 \(0\) 则需要操作两次, \(1\) 需要操作一次。
要使操作数尽可能小,就要让中间的 \(0\) 连续段尽可能长,所以枚举出最长连续段,然后两边计算操作数即可。
- P14253
如果一个小区间被一个大区间包含且左端点相同,那么这个小区间一定不比大区间更优。
所以考虑枚举左端点 \(L\),判断区间 \([L,n]\) 中 \(0\) 的个数。
具体做法是对 \(a\) 数组做一遍前缀和,然后用 \(map\) 维护每一个值出现的次数,左端点向右移动的时候在 \(map\) 中查找对应的值的个数。
- P1938
N 题。
- P4588
对于操作一建一棵线段树,初始值全是 \(1\)。
操作一和二就是单点修改,注意 long long 和取模。
- P8271
神秘思维题。
自然是要考虑 \(O\),\(W\) 两个字母,发现对于 \(OW\) 或 \(WO\) 能变为 \(C\),自然两个相邻字母可以交换位置,也就是任意两个字母可以调换顺序。
于是把 \(O,W\) 尽可能多地变成 \(C\),然后剩下的两两删除,根据奇偶性判断是否只剩下一个 \(C\)。
- P4513
线段树维护最大子段和。
对于每一个节点,要维护区间和,区间最大子段和,最大前缀和,最大后缀和。
- P3384
树剖。
一些定义:
一个节点的子树大小最大的子节点是这个节点的重儿子,其余的为轻儿子。
连接两个重儿子的边是重边,其余的为轻边。
重链是又重边构成的一条链,其顶端为轻儿子。
首先先预处理出子树大小,重儿子,深度,dfs 序,该节点所在重链的链顶的节点编号。
因为预处理的时候先搜重儿子,所以重链上的点的 dfs 序是连续的,于是如果要修改/查询一条路径就可以让两个端点先跳到一条重链上,这个时候深度小的点是这两个点的 LCA,在这个过程中用线段树维护区间修改/查询。
修改/查询子树是容易的,因为一个子树内的点的 dfs 序是连续的,所以可以在 dfs 序上区间修改/查询。
- P3038
树剖。
将边权转化为点权,让这条边所连接的深度较大的点的点权赋为这条边的边权,如果选择深度较小的点的话这个点可能会对应很多不同的边权,而这里的映射必须是一一对应的。
- P4427
边权转点权。
发现 \(k\) 很小,所以预处理出来所有的从根节点到 \(u\) 的 \(k\) 次方和。
- P6098
树剖。
- P2824
二分答案,让 \(\ge mid\) 的数的值为 \(1\),剩下的为 \(0\) ,然后建一颗树统计一的个数,升序就先区间赋 \(0\) 再赋 \(1\),降序与之相反。
复杂度是 \(O(n \log^2 n)\) 的。
浙公网安备 33010602011771号