BZOJ 2457雙端佇列題解

2021-09-25 09:12:51 字數 810 閱讀 1456

我們之前學習了如何使用stl中的佇列

現在我們來看一道與佇列有關的神奇的題(看似佇列而非為佇列)————雙端佇列

分析:如果現在有一段序列 ai,ai+1,ai+2,······,aj-1,aj 滿足該雙端佇列的要求,即滿足:

aj-1<…ai+1**如下

#include

#include

#include

#include

#include

#include

#define maxn 200100

using

namespace std;

struct nodea[

200100];

int n;

int mx[

200100

],mi[

200100

],cnt=0;

int ans=

0,flag=

1,now=

0x7f7f7f7f

;bool

cmp(node a,node b)

intmain()

sort

(a+1

,a+n+

1,cmp)

;for

(int i=

1;i<=n;i++)}

mx[cnt]

=a[n]

.ps;

for(

int i=

1;i<=cnt;i++)}

else}}

cout

}

BZOJ2457 雙端佇列 題解

本題直接求解十分困難,因為在不知道整個序列的數字規律時當前所作決策都無法保證最優性。考慮正難則反,題目轉化為將乙個非降序列分成盡量少的幾段,讓每段對應原問題的雙端佇列。先將原陣列排序,由於原陣列下標對應了插入的順序,那麼根據雙端佇列的性質,被劃分出的每一段的下標都應該滿足單谷性質 最先插入的在最中間...

BZOJ 2457 雙端佇列

sherry 現在碰到了乙個棘手的問題,有 個整數需要排序。sherry 手頭能用的工具就是若干個雙端佇列。她需要依次處理這 n 個數,對於每個數,sherry 能做以下兩件事 1 新建乙個雙端佇列,並將當前數作為這個佇列中的唯一的數 2 將當前數放入已有的佇列的頭之前或者尾之後。對所有的數處理完成...

BZOJ 2457 雙端佇列 思維

bzo j2457雙端 佇列bz oj24 57雙端 佇列de scri ptio ndes crip tion sherry現在碰到了乙個棘手的問題,有 個整數需要排序。sherry手頭能用的工具就是若干個雙端佇列。她需要依次處理這n個數,對於每個數,sherry能做以下兩件事 1 新建乙個雙端佇...