1. 程式人生 > >【BZOJ2882】工藝 [SAM]

【BZOJ2882】工藝 [SAM]

tro script href 而且 數組 status 貪心 比較 time

工藝

Time Limit: 10 Sec Memory Limit: 128 MB
[Submit][Status][Discuss]

Description

  小敏和小燕是一對好朋友。
  他們正在玩一種神奇的遊戲,叫Minecraft。
  他們現在要做一個由方塊構成的長條工藝品。但是方塊現在是亂的,而且由於機器的要求,他們只能做到把這個工藝品最左邊的方塊放到最右邊。
  他們想,在僅這一個操作下,最漂亮的工藝品能多漂亮。
  兩個工藝品美觀的比較方法是,從頭開始比較,如果第i個位置上方塊不一樣那麽誰的瑕疵度小,那麽誰就更漂亮,如果一樣那麽繼續比較第i+1個方塊。如果全都一樣,那麽這兩個工藝品就一樣漂亮。

Input

  第一行兩個整數n,代表方塊的數目。
  第二行n個整數,每個整數按從左到右的順序輸出方塊瑕疵度的值。

Output

  一行n個整數,代表最美觀工藝品從左到右瑕疵度的值。

Sample Input

  10
  10 9 8 7 6 5 4 3 2 1

Sample Output

  1 10 9 8 7 6 5 4 3 2

HINT

   對於100%的數據,n<=300000

Main idea

  給定一個環,問從哪一位往後走開始得到的串字典序最小。

Solution

  我們先把串復制一遍

,然後建立一個SAM,然後貪心地走最小的即可。由於SAM的種種奇特♂性質,一定可以走完n個,輸出即可。由於數字很大,數組不夠存,於是我們使用map。

Code

技術分享 View Code

【BZOJ2882】工藝 [SAM]