Loading

P1155 [NOIP2008 提高组] 双栈排序

题目大意

给你一个序列 \(a\),要求一种双栈排序的方案使得其字典序最小。

题目思路

首先需要发现一个不容易想到但很关键简单的结论(仔细想一想就可以知道,这个结论无疑是充要的):

  • \(i < j < k\),且 \(a_k < a_i < a_j\),那么 \(i, j\) 不能在两个不同的栈里。

有了这个条件,把所有满足条件的 \(i, j\) 连边,然后判断其是否是一张二分图即可,注意最后微调字典序时由于 \(s1\) 的插入与 \(s2\) 的弹出,\(s1\) 的弹出与 \(s2\) 的插入都没有关系,所以如果相邻直接交换即可。

posted @ 2024-02-28 19:00  Alexande  阅读(11)  评论(0)    收藏  举报