传送门:
luogu1155
bzoj3693
我真傻,真的 。。。
( i , j ) (i,j) (i,j)不能压入同一个栈当且仅当存在 k k k,满足 i < j < k i<j<k i<j<k且 a k < a i < a j a_k<a_i<a_j ak<ai<aj。
然后二分图染色+模拟判即可。。。
Hall定理:
对于任意几组它们的区间的集合的大小必须要 ≥ \geq ≥这几组人数的总和。
破环为链
若某几组的区间不相交且不合法,那么它们本身必然存在不合法的情况。
所以问题转成对于连续的一段 [ L − R ] [L-R] [L−R], R − L + 1 R-L+1 R−L+1是否大于所有 [ l i , r i ] [l_i,r_i] [li,ri]在 [ L , R ] [L,R] [L,R]内的 a i a_i ai之和。
即 ∑ a i ≤ R − L + 1 → ∑ a i + L − 1 ≤ R \sum a_i\leq R-L+1\to \sum a_i+L-1\leq R ∑ai≤R−L+1→∑ai+L−1≤R
将组按端点排序后线段树维护即可。