Array Collapse

这篇题解可以看看(洛谷第一篇)

讲下我的做法

首先发现对于最终的序列,任意两个数(设为\(x\)\(y\))之间一定不会存在一个比两个数都小的数被删除,不然的话,我们设\(x\)\(y\)之间最小的数为\(p\),那么某个区间删除\(p\)的时候一定会同时把\(x\)\(y\)的某一个数删除

所以设\(f[i]\)表示前\(i\)个数,保留第\(i\)个数的所有方案,\(p\)为小于\(a_i\)的下标最大的数的下标

那么显然,\([p+1,i-1]\)中每一个数都可以作为最终序列的倒数第二个数保留

\(p\)当然也可以保留,但还有没有可以保留的数?

稍微分析一下,就可以知道,再找一下小于\(a_p\)的下标最大的数的下标\(q\),那么\(q\)也可以保留;再找一下小于\(a_q\)的下标最大的数的下标\(w\),那么\(w\)也可以保留...以此类推

我用了动态st+分治寻找\(p\)但实际上用单调栈就好了

posted @ 2024-02-25 10:35  最爱丁珰  阅读(10)  评论(0编辑  收藏  举报