CF193D Two Segments
一个段是非常经典的问题 pudding monsters。
序列上做不大了,考虑在值域上做。两个连续段可以用点减边,相邻两个同时出现的贡献是 $-1$,一个数字的贡献是 $+1$,这样要求就是贡献和小于等于 $2$。也是好维护的。
QOJ2743 Seats
全局想维护一个矩形很困难。考虑一个局部的性质:四个角上都是三白一黑,必要条件显然是三白一黑的格子个数等于 $4$。
然后这样如果矩形中间空了一个格子就寄了,所以还要求三黑一白的格子数量为 $0$。可以线段树维护这两者的和。
CF997E Good Subsegments
上个历史和就行了。
CF809D Hitchhiking in the Baltic States
维护 $f_i$ 表示长度为 $i$ 的子序列的最后一位最小是多少,加入一个数大概是一个区间平移和区间加一,还需要平衡树上二分。
CF765F Souvenirs
支配对。
P9678 [ICPC2022 Jinan R] Tree Distance
点分治找支配对。
CF702F T-Shirts
做过。
先把所有人有的钱从小到大排序加入一个平衡树。考虑按照价格从大到小不断加入点。这样加入一个数之后可以平衡树上二分找到会买这个东西的人,并把他们的值全部减去代价。
但是这样可能就不满足单调性了。但是发现如果不满足单调性,数字大小至少除了 $2$。所以可以均摊的暴力插入合并。复杂度 $\mathcal O(n\log^2 n)$。
[ARC159D] LIS 2
简单。
考虑求 LIS 的两种方式:$f_i$ 表示结尾是 $i$ 的最长 LIS 是多少,或者 $g_i$ 表示长度为 $i$ 的结尾最小是多少。
经过尝试之后可以发现第二种可以做,拿一个支持平移,区间 $+1$ 的 fhq 维护 DP 数组就行了。
CF1131G Most Dangerous Shark
求出 $pre_i,nex_i$ 表示向左向右最多能推倒到哪里。然后设 $f_i$ 表示推倒了前 $i$ 个牌的最小代价。暴力 DP 是 $\mathcal O(n^2)$ 的因为要求一个 $[pre_i,i]$ 的后缀和,然后 $nex_i$ 直接更新就好了。
考虑优化,直接上线段树寄完了。考虑在后面加数,查询后缀 $\min$ 是可以单调栈做的。
然后有核心性质:$[f_i,i]$ 不存在相交但不包含。所以可以查单调栈的时候不用二分,可以直接 pop 掉,随便记一下最小值就行了。
CF1677E Tokitsukaze and Beautiful Subsegments
唐氏题。
单调栈求出 $L_i,R_i$ 表示左,右第一个比 $a_i$ 大的数。然后枚举 $i,j,i\times j$,可以求出来一些合法点。
然后就变成了矩形查询矩形面积并。
CF264E Roadside Trees
难。
CF1672I PermutationForces
难。
CF983D Arkady and Rectangles
难。
CF264E Roadside Trees
不是很难但是还是挺难的。