題目鏈結
二分優化lis
字典序最小的方案不好求。
於是就倒過來求以乙個數開頭的最長上公升子串行。
字典序小的放前面。
輸出時取最優就好。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11 #include
12using
namespace
std;
13const
int inf=2147483647;14
int n,f[10010],a[10010],stack[10010
],top,temp,m,x;
15int
main()
1630 f[i]=ans+1;top=max(top,f[i]);
31 stack[f[i]]=max(stack[f[i]],a[i]); 32}
33 scanf("
%d",&m);
34for(int i=1;i<=m;i++)
3545
} 46}
47return0;
48 }
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...
bzoj 1046 HAOI2007 上公升序列
首先用f i 表示從i開始的最長上公升子串行的長度 注意這裡和平時的不一樣,是以i開頭而不是以1到i 這就相當於倒序做一遍最長下降子串行 然後要用到貪心 首先假設要取長度為x的,如果比算出來的max大 max正序倒序都一樣的 肯定無解 然後從頭開始取,因為從頭取的下標字典序最小,如果a i 比上乙個...
BZOJ1046 HAOI2007 上公升序列
portal 首先是否存在很容易。考慮如何輸出最小字典序的方案。注意。是位子的字典序,不是值。那麼這樣的話,倒過來做一遍最長下降子串行。f i 表示以 i 開頭的最長上公升子串行長度 找答案的時候就順著找,每次滿足條件就輸出。include include include define n 1000...