HAOI2007 上公升序列

2022-09-19 02:42:12 字數 688 閱讀 1322

最長上公升子串行有兩種遞推方式。

1:f [ i ] 表示以第 i 個數結尾的最長上公升子串行長度。

2:f [ i ] 表示以第 i 個數開始的最長上公升子串行長度。

對於本題,要特別注意對字典序最小的規定。

我一開始以為是得到的數字序列的字典序最小,還記錄了前驅和一大堆東西,然而全wa了。

後來才發現字典序最小是對應的下標序列最小。

所以對於本題,我們要用第二種方式也就是求出以每個數開始的最長上公升子串行長度。

因為字典需最小,所以下標要盡量靠前。

對於每個查詢,我們從頭開始掃瞄,只要第i個數 f [ i ] >= l 且 a [ i ] > last ,我們就可以將其放入最長上公升子串行中且一定滿足字典序最小。 last 代表我們上乙個選入的數,同時每選乙個數,序列剩下長度就減一,對應 --l 。

// q.c

#include#include#include#include#include#includeusing namespace std;

const int m=10000+10;

int n,m,maxx,d[m],f[m];

void lis()

}void solve(int x)

printf("\n");

}int main()

return 0;

}

BZOJ 1046 上公升序列 HAOI2007

和字典序有關的題型啊。對於乙個給定的s 若有p 滿足 x1 x2 xm 且 ax1 ax2 axm 那麼就稱p為s的乙個上公升序列。如果有多個p滿足條件,那麼我們想求字典序最小的那個。任務給出s序列,給出若干詢問。對於第i個詢問,求出長度為li的上公升序列,如有多個,求出字典序最小的那個 即首先x1...

HAOI2007 覆蓋問題

最小化 l 使 3 個 l l 的正方形能覆蓋圖上 n 個點。首先肯定要二分答案,l 是算不出來的。然後構建乙個覆蓋所有點的最小矩形。注意到每條邊至少要乙個正方形靠著。但現在只有 3 個正方形,意味著至少有乙個正方形靠著兩條邊。靠著相對的兩條邊?那說明這個圖被這 3 個正方形併排著覆蓋。即一定存在靠...

1046 HAOI2007 上公升序列

time limit 10 sec memory limit 162 mb submit 4187 solved 1429 submit status discuss description 對於乙個給定的s 若有p 滿足 x1 x2 xm 且 ax1 ax2 axm 那麼就稱p為s的乙個上公升序列...