汕頭市隊賽 SRM 07 A 你的麻將會排序嗎

2022-04-30 08:48:06 字數 1203 閱讀 4448

曾經有過一些沉迷日麻的小孩紙,後來呀,他們都去尋找自己的世界了。

kpm也是這樣的小孩紙。他想有乙隻自動整理牌的機器。當麻將以給定的順序進入機器時,通過機器的運轉,使得麻將們出機器的順序是遞增的。所以kpm需要在機器中建立一些傳送帶 (假設這些傳送帶都是足夠長,可以停放很多很多的麻將),問題是,現在kpm需要建立多少條傳送帶才能完成他的機器。

kpm大概有10^5塊麻將吧。

第一行是乙個不大於10^5的數,表述麻將的總數。

第二行是麻將依次進入機器的編號,ai表示編號為ai的麻將在i時刻進入機器,保證是乙個1-n的排列。

乙個數字,表示這個機器最少需要建幾條傳送帶。

9

8 4 2 5 3 9 1 6 7

4

這道題其實很容易看出來是求有多少個下降序列(不重複)

就像很多人寫過的飛彈攔截一樣 我們可以貪心

每個數x我們都可以找已知的序列中每個序列最末也就是最小的數和x比較 比x大的都符合條件

不過由貪心可得越接近x越好 所以我們的目標其實是找到比x大中最小的

然後我們發現 我們維護的序列具有單調性

比如我們每次找到乙個數 x

若序列中沒有符合的 那麼我們會新開乙個序列 而這個序列的末端就是x 一定比前面所有的序列末端都大

若找到了j個符合的n-j——n,那麼n-j就是我們要找的最優解 此時x比1-n-j的末端都大 比n-j——n的末端都小 此時用x替換n-j的末端

容易證明序列仍然單調 那麼我們就可以繼續二分了

#include#include

#include

#include

#define ll long long

using

namespace

std;

const

int m=1e5+7

;int

read()

while(c>='

0'&&c<='9')

return ans*f;

}int

n,w[m],cnt,k;

int find(int

k)

returnl;}

intmain()

printf(

"%d\n

",cnt);

return0;

}

view code

汕頭市隊賽 SRM 07 C 整潔的麻將桌

背景 描述 天才麻將少女kpm立志要在日麻界闖出一番名堂。kpm上週雙打了n場麻將,但她這次沒控分,而且因為是全民參與的麻將大賽,所以她的名次範圍是1.10 9。因為找膜法使的事被妹子打斷了三條腿後,kpm這次要用自己的真實本領讓名次嚴格遞增。幸好她從前把出題人的頭像賣給了炮姐,現在kpm可以入侵比...

汕頭市隊賽 SRM 08 A

比賽沒參加 所以回來補題咯 a還是自己yy出來了的 可惜比賽沒有打 描述給乙個 01 串設為其 s,詢問是否存在只出現兩次的 01 串 t。這裡的出現定義為存在一串下標 滿足第二個樣例中,0 出現了兩次 這道題肯定先特判一波 1 和 0 是否只出現了2次 這是唯一乙個t能由單一的1或者0組成的情況 ...

汕頭市隊賽 SRM16 T2

描述 貓和老鼠,看過吧?貓來了,老鼠要躲進洞裡。在一條數軸上,一共有n個洞,位置分別在xi,能容納vi只老鼠。一共有m只老鼠位置分別在xi,要躲進洞裡,問所有老鼠跑進洞裡的距離總和最小是多少。輸入格式 兩個用空格隔開的整數m和n。這一行m個數字分別表示老鼠的位置 接下來n行每行兩個數字分別表示洞的位...