BZOJ2457 雙端佇列 題解

2022-07-31 06:45:10 字數 499 閱讀 7831

本題直接求解十分困難,因為在不知道整個序列的數字規律時當前所作決策都無法保證最優性。

考慮正難則反,題目轉化為將乙個非降序列分成盡量少的幾段,讓每段對應原問題的雙端佇列。

先將原陣列排序,由於原陣列下標對應了插入的順序,那麼根據雙端佇列的性質,被劃分出的每一段的下標都應該滿足單谷性質(最先插入的在最中間,之後向兩邊遞增)。

又發現由於是非降序列,那麼相同數字的次序不是固定的,可以通過交換兩個相同數字使答案更優。

所以此題做法為:對數字相同的每一段依次考慮,利用貪心策略把當前序列(下標)遞減或遞增地插入序列末尾。

#include #include using namespace std;

struct pa[200005];

int n,ans=1;

bool cmp(p x,p y)

else

}printf("%d",ans);

return 0;

}

BZOJ 2457雙端佇列題解

我們之前學習了如何使用stl中的佇列 現在我們來看一道與佇列有關的神奇的題 看似佇列而非為佇列 雙端佇列 分析 如果現在有一段序列 ai,ai 1,ai 2,aj 1,aj 滿足該雙端佇列的要求,即滿足 aj 1 ai 1 如下 include include include include inc...

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 新建乙個雙端佇...