#14 [BZOJ2090/2089] [Poi2010]Monotonicity 2/Monotonicity
题解:
首先想到了标算。。然后证明了一发是错的(事实证明很智障)
先说正确性比较显然的O(n^2)算法
令f[i][j]表示前i个物品,匹配到第j个括号,最大值是多少
g[i][j]表示前i个物品,匹配到第j个括号,最小值是多少
然后这个转移是O(1)的 状态是n^2的
被状态局限了就没法优化了
标算:
令f[i]表示取第i个的情况下最大到达的位置,f[i+1]由f[ 1-----i ]转移
我们来证明一下这个的正确性
原命题:每个f[i]一定是由前面某个f[j]转移过来
逆命题:其中有一个f[i]是由j的某个非最优状态转移而来
既然f[i]由j的某个非最优状态转移,那么f[j]+1这个符号一定与a[i],a[j]的大小不符
举个例子 a[i]是3 a[j]是4 大小关系是>><
现在f[j]=2,即下一位要求a[j]<a[i] 所以a[i]和a[j]不满足要求
那么一定是由前面一个>转移的(因为满足a[j]>a[i])
那我们看一下f[j]是怎么来的 前面一定有个k满足a[k]>a[j]
那么a[k]>a[j]>a[i] 这样 f[i]一定是可以从a[k]转移而来的
原命题得证
然后有了这个dp方程显然线段树优化一下就可以了