UVa 10534 波浪子串行(快速求LIS)

2022-06-20 21:30:11 字數 975 閱讀 8249

題意:給定乙個長度為n的整數序列,求乙個最長子序列(不一定連續),使得該序列的長度為2k+1,前k+1個數嚴格遞增,後k+1個數嚴格遞減。

思路:先正著求一遍lis,再反著求一遍lis。

當然求法是得採用o(nlogn)的求法,這個網上有很多解釋,我就不多介紹了。

最後的話列舉一遍就可以了,詳見**。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11

using

namespace

std;

12 typedef long

long

ll;13 typedef pairpll;

14const

int inf=0x3f3f3f3f;15

const

int maxn=10000+5;16

17int

n;18

inta[maxn],r_a[maxn],g[maxn],d1[maxn],d2[maxn];

1920

intmain()

2130

31int ans1=0;32

for(int i=1;i<=n;i++) g[i]=inf;

33for(int i=0;i)

3440

41int ans2=0;42

for(int i=1;i<=n;i++) g[i]=inf;

43for(int i=0;i)

4450

51//

列舉遞增和遞減的分隔點

52int ans=0;53

for(int i=0;i)

5459 printf("

%d\n

",ans);60}

61return0;

62 }

UVA 木塊問題 101

uva 木塊問題 101,好開森好開森。雖然花了很長時間,不過能一次就ac也是蠻開心的,用c 寫效率就是不錯 疊木塊其實是乙個二維空間,每個木塊都有縱橫座標 include include includeusing namespace std block用於記錄木塊所在位置,x是位於哪一疊木塊,y是...

UVA 非常可樂

include include include include include using namespace std struct node int vis 205 205 注意vis陣列用於 int s,n,m int cup left 3 記錄三個杯子中每個杯子的剩餘狀態 int bfs fo...

UVa百題總結

總算刷夠 演算法競賽入門經典 100題了,就像教主所說,有了練acm的誠意,受自身水平和眼界所限,這總結難免會有一些個人色彩和不正確的地方,大牛勿噴。另外我的文筆可能極其拙劣,將就著看吧。按照教主的進度安排,最理想的情況是寒假學完前八章,下學期開始學動態規劃 數學和圖論的基礎,為暑假集訓打下基礎。暑...