bzoj1049 HAOI2006 數字序列

2021-09-01 19:12:33 字數 858 閱讀 4519

設f[i]為以i開頭的最長上公升序列的長度,第乙個元素a[i]必須滿足f[i]>=m,第x個元素為a[y],則第(x+1)個元素a[z]需要滿足的條件是a[z]>a[y],且f[z]=f[y]-1

這位的題解很詳細

const int n = 35010;

struct edge

edge(int _to, edge *_next) : to(_to), next(_next) {}

} *fir[n];

int n, data[n];

int dp[n], f[n];

inline void input()

int t[n], len; // step1

ll c1[n], c2[n]; // step2

inline void ins(int u, int v)

inline void solve()

printf("%d\n", n - dp[n]);

data[0] = -inf, dp[0] = 0;

// step2

for(i, 0, n) fir[i] = null;

ford(i, n, 0) ins(dp[i], i), f[i] = inf;

f[0] = 0;

for(i, 1, n)

for(edge *tab = fir[dp[i] - 1]; tab != null; tab = tab->next)

printf("%d\n", f[n]);

// debug

//for(i, 1, n) printf("%d ", f[i]);}

int main()

BZOJ1049 HAOI2006 數字序列0

現在我們有乙個長度為n的整數序列a。但是它太不好看了,於是我們希望把它變成乙個單調嚴格上公升的序列。但是不希望改變過多的數,也不希望改變的幅度太大。第一行包含乙個數n,接下來n個整數按順序描述每一項的鍵值。n 35000,保證所有數列是隨機的 第一行乙個整數表示最少需要改變多少個數。第二行乙個整數,...

BZOJ1055 HAOI 玩具取名

某人有一套玩具,並想法給玩具命名。首先他選擇wing四個字母中的任意乙個字母作為玩具的基本名字。然後 他會根據自己的喜好,將名字中任意乙個字母用 wing 中任意兩個字母代替,使得自己的名字能夠擴充得很長。現在,他想請你猜猜某乙個很長的名字,最初可能是由哪幾個字母變形過來的。第一行四個整數w i n...

BZOJ 1046 HAOI 上公升序列

1046 haoi2007 上公升序列 time limit 10 sec memory limit 162 mbsubmit 5376 solved 1862 submit status discuss description 對於乙個給定的s 若有p 滿足 x1 x2 xm 且 ax1 2 出s...