這題比較經典,我們想要求比他小的最遠的點
因此我們發現,如果乙個點比他前面的點大還比他近,說明這個點永遠不會作為答案
因此我們就可以維護乙個單調佇列,之後二分找到第乙個大於等於他的位置在哪,之後這個位置的前乙個就是答案
#includeusingview codenamespace
std;
typedef
long
long
ll;typedef pair
pll;
const
int n=2e5+10
;const
int inf=0x3f3f3f3f
;int
a[n];
intans[n];
vector
num,v;
intmain()
for(i=n;i>=1;i--)
else
}for(i=1;i<=n;i++)
cout
cout
<
}
CF91B Queue 權值線段樹
有n個人在佇列中等待。假如某個人前面有乙個人年齡比他小,那他就會不高興 定義他的 不高興度 為他前面留他最遠的年齡比他小的人與他的距離,求每個人的不高興度。n 10 5 權值線段樹 include using namespace std const int inf 1e 9 7 const int ...
CodeForce 91B 單調佇列 二分
題意 個數,求出a i a i a i 後面最後乙個小於a i a i a i 的數與a i a i a i 間的距離,如果沒有小於a i a i a i 的數則輸出 題解 從後往前遍歷陣列,單調佇列維護乙個遞減的序列,每次判斷將要插入的數與隊尾的數的大小關係。如果當前插入的數不能保持佇列的單調性則...
CF939F Cutlet 單調佇列優化DP
題目大意 要煎一塊有兩個面的肉,只能在一段k不相交的時間段 l r 內翻轉,求 2 n 秒後,保證兩個面煎的時間一樣長時,需要最少的翻轉次數,n 100000 k 100 神仙單調佇列優化 dp noi2005 瑰麗華爾茲 也有類似的壓時間段的套路,但這道題可比那道題難多了。樸素 o n 2 的 d...