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

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

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

      CSP/NOIP 復習:單調棧

      最近模擬賽打的都不是太好,先隨便復習復習吧,馬上就要 CSPS 了,我可以考好的。

      這里放一些單調棧的題目,笛卡爾樹先不說,這個我已經忘了,后天復習一下。

      本體

      棧中維護有單調性的數據,入棧時維護這個單調性,這是計算結果。

      是個人都會,不想多寫。

      直接進入 dlc 環節。

      最大子矩形。

      就是一個平面,有一些障礙不能選,要求我們選出來一個最大的,不包含障礙的子矩形,這個就可以使用單調棧來做。

      我們先考慮一個弱化版的。

      HISTOGRA - Largest Rectangle in a Histogram

      這個是簡單的,我們考慮盡可能使用每個位置的最高值,也就是算出來左邊最近的比它矮的位置和右邊最近比它矮的位置。

      正確性顯然,最大的矩形肯定盡可能用完了位置。

      直接上單調棧,注意初始化左右要大一個。

      代碼↓

      點擊查看代碼
      #include <bits/stdc++.h>
      #define int long long
      using namespace std;
      const int MN=1e6+116;
      bool ed=false;
      int stk[MN], top, n, a[MN];
      int l[MN], r[MN], ans=0;
      void Getl(){
      	top=0;
      	for(int i=1; i<=n; ++i){
      		while(top&&a[stk[top]]>a[i]){
      			r[stk[top]]=i; --top;
      		}
      		stk[++top]=i;
      	}
      }
      void Getr(){
      	top=0;
      	for(int i=n; i>=1; --i){
      		while(top&&a[stk[top]]>a[i]){
      			l[stk[top]]=i; --top;
      		}
      		stk[++top]=i;
      	}
      }
      void Solve(){
      	cin>>n; for(int i=1; i<=n; ++i) cin>>a[i];
      	if(n==0){ed=true; return;}
      	for(int i=1; i<=n; ++i) l[i]=0;
      	for(int i=1; i<=n; ++i) r[i]=n+1;
      	Getl(); Getr(); ans=0;
      	for(int i=1; i<=n; ++i){
      		ans=max(ans,(r[i]-l[i]-1)*a[i]);
      	}
      	cout<<ans<<'\n';
      }
      signed main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	while(!ed) Solve();
      	return 0;
      }
      

      換到二維上就很簡單了,對于每一個高度跑一遍就行了。

      P4147 玉蟾宮

      代碼↓

      點擊查看代碼
      #include <bits/stdc++.h>
      #define int long long
      using namespace std;
      const int MN=3145;
      char mp[MN][MN];
      int n, m, h[MN][MN];
      int stk[MN], top=0;
      int l[MN], r[MN], ans=0;
      void Read(){
      	cin>>n>>m;
      	for(int i=1; i<=n; ++i){
      		for(int j=1; j<=m; ++j){
      			cin>>mp[i][j];
      		}
      	}
      	for(int i=1; i<=n; ++i){
      		for(int j=m; j>=1; --j){
      			h[i][j]=h[i][j+1]+1;
      			if(mp[i][j]=='R') h[i][j]=0;
      		}
      	}
      }
      void Getr(int height){
      	top=0;
      	for(int i=1; i<=n; ++i) r[i]=n+1;
      	for(int i=1; i<=n; ++i){
      		while(top&&h[stk[top]][height]>h[i][height]){
      			r[stk[top]]=i; --top;
      		}
      		stk[++top]=i;
      	}
      }
      void Getl(int height){
      	top=0;
      	for(int i=1; i<=n; ++i) l[i]=0;
      	for(int i=n; i>=1; --i){
      		while(top&&h[stk[top]][height]>h[i][height]){
      			l[stk[top]]=i; --top;
      		}
      		stk[++top]=i;
      	}
      }
      void Solve(){
      	Read();
      	for(int height=1; height<=m; ++height){
      		Getl(height); Getr(height);
      		for(int i=1; i<=n; ++i){
      			//cout<<l[i]<<" "<<r[i]<<" | ";
      			ans=max(ans,(r[i]-l[i]-1)*(h[i][height]));
      		}
      	}
      	cout<<ans*3<<'\n';
      }
      signed main(){
      	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
      	Solve();
      	return 0;
      }
      
      posted @ 2025-10-24 19:20  BaiBaiShaFeng  閱讀(6)  評論(0)    收藏  舉報
      Sakana Widget右下角定位
      主站蜘蛛池模板: 国产精品黄色一区二区三区| 亚洲中文字幕第一页在线| 亚洲 日本 欧洲 欧美 视频| 国产精品久久久久无码av色戒| 国产三级国产精品国产专| 欧美日韩国产图片区一区| 国产免费视频一区二区| 亚洲精品美女久久久久9999| 日韩国产精品中文字幕| 久久不见久久见中文字幕免费| 国产激情文学亚洲区综合| 久久久久久伊人高潮影院| 亚洲午夜性猛春交xxxx| 国产成本人片无码免费| 99久久无码一区人妻a黑 | 午夜福利精品国产二区| jizz国产免费观看| 呻吟国产av久久一区二区| 亚洲精品无码久久毛片| 国精品无码一区二区三区在线| 精品久久精品久久精品久久| 亚洲成人av综合一区| 国产精品免费看久久久| аⅴ天堂国产最新版在线中文| 丰满岳乱妇三级高清| 国产成人精品亚洲午夜| 上司的丰满人妻中文字幕| 高清在线一区二区三区视频| 四虎国产精品永久入口| 午夜福利精品国产二区| 黄色亚洲一区二区在线观看 | 欧美国产日产一区二区| 亚洲av日韩在线资源| 欧美熟妇xxxxx欧美老妇不卡| 日本成熟少妇喷浆视频| 国产三级a三级三级| 黄瓜视频在线观看| 九九热在线免费精品视频| 日韩高清亚洲日韩精品一区二区| 99RE6在线视频精品免费下载| 久久国产精品色av免费看|