<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      單調棧優化DP [ROI 2018] Decryption

      題意

      要求把一個序列劃分成很多段,要求對于每段,最大值是末項,最小值是首項。

      求最小劃分段數。

      解法

      我們貪心來思考,若我們要保證一直到 i 是合法的,左端點顯然是越往左越好,但是在全局上是并沒有這個性質的,所以考慮 dp;

      用兩個單調棧,嚴格單調減的 stk1, 嚴格單調增的 stk2。

      設 dp[i] 表示劃分完 1~i 的最小段數。

      我們在嚴格單調減的棧頂往下一個就是我們最極限的往左的位置(先不考慮首項最小的性質)

      之后在 stk2 upper_bound 一下這個位置,找到最極限往左的地方。

      n log n 太美麗辣。

      代碼↓

      點擊查看代碼
      #include <bits/stdc++.h>
      using namespace std;
      const int MN=1e6+116;
      int stk1[MN], stk2[MN], dp[MN];
      int a[MN], n, top1, top2;
      int main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];
      	for(int i=1; i<=n; ++i){
      		while(top1&&a[stk1[top1]]<=a[i]) --top1;
      		stk1[++top1]=i;
      		while(top2&&a[stk2[top2]]>a[i]) --top2;
      		stk2[++top2]=i;
      		dp[i]=dp[*upper_bound(stk2+1,stk2+top2+1,stk1[top1-1])-1]+1;
      	}
      	cout<<dp[n]<<'\n';
      	return 0;
      }
      
      posted @ 2025-09-29 07:57  BaiBaiShaFeng  閱讀(15)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 亚洲国产精品热久久一区| 国产视频一区二区三区四区视频| 国产成人精品亚洲午夜麻豆| 亚洲第一区二区三区av| 丰满岳乱妇三级高清| 亚洲一区二区| 婷婷成人丁香五月综合激情| 久久精品熟妇丰满人妻久久| 久久久久亚洲av成人网址| 亚洲人成色99999在线观看| 日韩精品卡一卡二卡三卡四| 亚洲无线码一区二区三区| 国产一区二区三区禁18| 国产av不卡一区二区| 久久国产精品老女人| 国语自产精品视频在线看| 国产露脸无套对白在线播放| 亚欧成人精品一区二区乱| 国产欧美日韩亚洲一区二区三区| 久久久精品人妻一区二区三区| 国产成人8X人网站视频| 国产精品无码专区| 国产精品亚欧美一区二区三区| 科技| 国产成人无码免费看片软件| 国产福利酱国产一区二区| 久久婷婷五月综合色一区二区 | 亚洲成精品动漫久久精久| 欧美激情一区二区三区成人| 亚洲精品一区国产精品| 国产亚洲AV电影院之毛片| 国产成年码av片在线观看| 国产熟睡乱子伦视频在线播放| 人成午夜免费视频无码| 欧美午夜成人片在线观看| 好爽毛片一区二区三区四| 99热精品国产三级在线观看| 亚洲AV永久无码精品秋霞电影影院| 久久婷婷综合色丁香五月| 久久精品国产国产精品四凭| 一本一道av中文字幕无码|