NOIp2018提高組 雙棧排序

2022-05-01 21:06:14 字數 857 閱讀 2202

這真是道神奇的題目:

原題鏈結

首先我們要證明以下的性質:

若原序列為\(\\),\(a_i\)和\(a_j\)不能同時放入乙個棧中,當且僅當\(i,且存在\(k\),\(s.t. \ k>j\)的同時有\(a_k。

原因很顯然,因為有比\(a_i\)還小的元素在後面,若放入同乙個棧中,必須先壓棧壓到\(a_k\),再彈出,但又因為會先彈出\(a_j\),序列的單調性就被破壞了。

所以對於每一對\(a_i\)和\(a_j\),我們都可以用上述性質來判斷它們是否能在同乙個棧中,再用字尾最大值優化一下,複雜度\(o(n^2)\)。

然後我們就有了這樣的一些關係,我們該如何利用這些關係來判斷序列是否合法呢?

二分圖染色,對於不能在同乙個棧中的兩個位置,我們連一條無向邊,然後dfs判斷所有點能否二染色。如果能,序列就是合法的,否則不合法。

對於染色後的圖,其實我們已經知道操作順序了,又因為題目要求字典序最小,所以我們只用模擬一下,優先在棧\(s1\)上操作就行了。

上**:

#include using namespace std;

#define wrap cout << endl

const int n = 1000;

int n, a[n+5], color[n+5], f[n+5], flag;

vectorg[n+5];

void addedge(int u, int v)

void dfs(int u)

else

}}void solve()

}}int main()

solve();

return 0;

}

NOIP2018提高組初賽

在一條長度為 1 的線段上隨機取兩個點,則以這兩個點為端點的線段的期望長度是 1 3 frac13 31 解析 使用排除法解決問題,當左邊的點在左邊端點是,期望長度為1 2 frac12 21 所以答案一定小於1 2 frac12 21 為了統計乙個非負整數的二進位制形式中 1 的個數,如下 int...

NOIp2018 提高組遊記

上午請假,沒去學校,在家裡刷了十多道題,中午12點出發去杭州 16點到達賓館,和hsy,oyyj嘮了會兒嗑,開始刷模板 晚飯炸雞真香,和xjd學長聊了一會兒,又和鄒sir聊了一會兒,回顧了自己的部落格,22點準時睡覺 失眠了,22 00 02 00,我不知道我是怎麼度過的,作為提高萌新,真的有點緊張...

NOIP 2018 提高組 鋪設道路

傳送門 題目描述 春春是一名道路工程師,負責鋪設一條長度為 n nn 的道路。鋪設道路的主要工作是填平下陷的地表。整段道路可以看作是 n nn 塊首尾相連的區域,一開始,第 i ii 塊區域下陷的深度為 d id i di 春春每天可以選擇一段連續區間 l ll r rr 填充這段區間中的每塊區域,...