P3527 [POI2011] MET-Meteors
题意:给定一个序列,这个序列中每个元素的值代表了一个变量 每次将这个区间内的所有变量加或减,且每个变量都有一个上限,求第几次操作之后达到这个上限
对于一个变量,可以用简单二分实现,现在有多个变量,则可以用整体二分,solve(a,b,l,r) 代表区间a,b的操作和区间l,r的答案,每次算出区间a,mid的操作,对于l,r的答案,把足够答案的放前面不足的放后面。
一些小细节:对于一个环形操作,把它化成区间操作,就把它长度乘2,每次统计原有区间的和二倍区间的值加起来
一个变量有多个位置,可以通过类似于链式前向星的方式维护
P4782 【模板】2-SAT
题意:一系列“非A即B” ,或者“A或B” 的要求, 要求你给出答案一定要满足所有要求
每个点幻化成实点,虚点 如果“A或B”,就连一条非A到B 非B到A ,最后跑tarjan 如果一组点在同一个分量里,就算错
答案就是实点和虚点中dfs序更大的那个
HISTOGRA - Largest Rectangle in a Histogram
题意:在一条水平线上有n个宽为1的矩形,求包含于这些矩形的最大子矩形面积
对于一个矩形来说,如果后来的矩形的高度不如他,那么以这个矩形的高为高的最大矩形,就到它的结束了
考虑从小到大的单调栈,某个元素先入栈,在这个栈的左边的是左边缘,右边的是右边缘,就可以统计答案了
像这种题目,可以以左边来统计,也可以以顶端来统计,很灵活