日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

模板 - 数据结构 - ST表 + 二维ST表

發布時間:2025/3/15 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 模板 - 数据结构 - ST表 + 二维ST表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

區間最大值,$O(nlogn)$ 預處理,$O(1)$ 查詢,不能動態修改。在查詢次數M顯著大于元素數量N的時候看得出差距。

?

令 $f[i][j]$?表示 $[i,i+2^j-1]$?的最大值。

顯然, $f[i][0]=a[i]$ 。?

根據定義式,寫出狀態轉移方程: $f[i][j]=max(f[i][j-1],f[i+2^{j-1}][j-1])$ 。

我們可以這么理解:將區間 $[i,i+2^j-1]$?分成相同的兩部分

中點即為 $(i+(i+2^j-1))/2=i+2^{j-1}-1/2$?

所以?$[i,i+2^j-1]$?可以分成?$[i,i+2^{j-1}-1]$?和?$[i+2^j,i+2^j-1]$?

?

對于每個詢問 $[x,y]$ ,我們把它分成兩部分 $f[x][s],f[y-2^s+1][s]$?

其中 $s=log_2(y-x+1)$ ,雖然這兩個區間有重疊,但是重疊不會影響區間的最大值

#include <bits/stdc++.h> using namespace std; #define ll long longconst int MAXLOGN=17; const int MAXN=100000; int a[MAXN+5],f[MAXN+5][MAXLOGN+1],Logn[MAXN+5];inline int read() {char c=getchar();int x=0,f=1;while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();}return x*f; }void init() {Logn[1]=0;Logn[2]=1;for(int i=3; i<=MAXN; i++) {Logn[i]=Logn[i/2]+1;} }
int main() {init();int n=read(),m=read();for(int i=1; i<=n; i++)f[i][0]=read();for(int j=1; j<=MAXLOGN; j++)for(int i=1; i+(1<<j)-1<=n; i++)f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);for(int i=1; i<=m; i++) {int x=read(),y=read();int s=Logn[y-x+1];printf("%d\n",max(f[x][s],f[y-(1<<s)+1][s]));}return 0; }

?

二維:

#include<bits/stdc++.h> using namespace std; #define MAXN 501 int n,m; int rec[MAXN][MAXN]; char dp[MAXN][MAXN][11][11]; char dp1[MAXN][MAXN][11][11]; inline int maxm(int a,int b,int c,int d) {if(a<b)a=b;if(a<c)a=c;if(a<d)a=d;return a; } inline int minm(int a,int b,int c,int d) {if(b<a)a=b;if(c<a)a=c;if(d<a)a=d;return a; } void st() {for(int k=0; (1<<k)<=n; k++)for(int l=0; (1<<l)<=m; l++)for(int i=1; i+(1<<k)-1<=n; i++)for(int j=1; j+(1<<l)-1<=m; j++) {if(!k&&!l) {dp1[i][j][k][l]=dp[i][j][k][l]=rec[i][j];} else if(k==0) {dp[i][j][k][l]=max(dp[i][j][k][l-1],dp[i][j+(1<<(l-1))][k][l-1]);dp1[i][j][k][l]=min(dp1[i][j][k][l-1],dp1[i][j+(1<<(l-1))][k][l-1]);} else if(l==0) {dp[i][j][k][l]=max(dp[i][j][k-1][l],dp[i+(1<<(k-1))][j][k-1][l]);dp1[i][j][k][l]=min(dp1[i][j][k-1][l],dp1[i+(1<<(k-1))][j][k-1][l]);} else {dp[i][j][k][l]=maxm(dp[i][j][k-1][l-1],dp[i+(1<<(k-1))][j][k-1][l-1],dp[i][j+(1<<(l-1))][k-1][l-1],dp[i+(1<<(k-1))][j+(1<<(l-1))][k-1][l-1]);dp1[i][j][k][l]=minm(dp1[i][j][k-1][l-1],dp1[i+(1<<(k-1))][j][k-1][l-1],dp1[i][j+(1<<(l-1))][k-1][l-1],dp1[i+(1<<(k-1))][j+(1<<(l-1))][k-1][l-1]);}//printf("dp[%d][%d][%d][%d]=%d\n",i,j,k,l,dp[i][j][k][l]); } } int rmq2dmax(int x,int y,int x1,int y1) {int k=0;while((x1-x+1)>=(1<<k))k++;k--;int l=0;while((y1-y+1)>=(1<<l))l++;l--;return maxm(dp[x][y][k][l],dp[x1-(1<<k)+1][y][k][l],dp[x][y1-(1<<l)+1][k][l],dp[x1-(1<<k)+1][y1-(1<<l)+1][k][l]); }int rmq2dmin(int x,int y,int x1,int y1) {int k=0;while((x1-x+1)>=(1<<k))k++;k--;int l=0;while((y1-y+1)>=(1<<l))l++;l--;return minm(dp1[x][y][k][l],dp1[x1-(1<<k)+1][y][k][l],dp1[x][y1-(1<<l)+1][k][l],dp1[x1-(1<<k)+1][y1-(1<<l)+1][k][l]); }int main() {int g;scanf("%d%d%d",&n,&m,&g);for(int i=1; i<=n; i++) {for(int j=1; j<=m; j++) {scanf("%d",&rec[i][j]);}}st();for(int l=min(n,m); l; l--) {for(int i=1; i<=n; i++) {if(i+l-1>n)break;for(int j=1; j<=m; j++) {if(j+l-1>m)break;int t=rmq2dmax(i,j,i+l-1,j+l-1)-rmq2dmin(i,j,i+l-1,j+l-1);if(t<=g){printf("%d\n",l);exit(0);}}}} }

?

轉載于:https://www.cnblogs.com/Yinku/p/10472788.html

總結

以上是生活随笔為你收集整理的模板 - 数据结构 - ST表 + 二维ST表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青青伊人久久 | 国产精品久久午夜夜伦鲁鲁 | 久久精品久久久久久 | 在线爱情大片免费观看大全 | 噜噜噜噜私人影院 | 亚洲天堂男人天堂 | 无码人妻黑人中文字幕 | 久久精品一 | www.五月婷| 国产亚洲激情 | 黄片毛片在线看 | av男人网| 夜夜看 | 男插女视频免费 | 毛片毛片毛片毛片毛片毛片毛片毛片 | 日韩av中文在线 | a级免费视频 | 欧美大尺度做爰啪啪床戏明星 | 国产精品国产三级国产aⅴ 欧美bbbbbbbbbbbb18av | 美女少妇av | 国产精品zjzjzj在线观看 | 一级黄色性视频 | 成人免费在线视频 | 亚洲爱情岛论坛永久 | 久久深夜 | 中文字幕在线1 | 都市激情中文字幕 | 久操视频免费观看 | 一个人免费在线观看视频 | 精品无码人妻一区二区免费蜜桃 | 好男人影视www | 男女吻胸做爰摸下身 | 在线观看高清av | www,超碰 | 亚洲伊人av | 18无码粉嫩小泬无套在线观看 | 欧美极品少妇xxxxⅹ免费视频 | 一区二区三区国产av | 九九福利视频 | 在线观看亚洲a | 日韩综合区 | 国产1区2区在线观看 | 久久精品久久久精品美女 | 97成人超碰 | 久久久久久久久福利 | 最新理伦片eeuss影院 | 先锋av资源网站 | 91亚洲综合 | 久久的色偷偷 | 亚洲天天在线 | 成人亚洲一区 | 农村末发育av片一区二区 | 波多在线观看 | 黄色草逼网站 | 亚洲爽爆av | youjizz自拍| 午夜粉色视频 | 狠狠干亚洲色图 | 日本三级黄在线观看 | 伊人久久久久噜噜噜亚洲熟女综合 | 欧美人伦 | 天天干天天做天天操 | 日本一区二区不卡在线 | 亚洲欧美动漫 | 日韩欧美a级片 | 97色网 | 国产又粗又长又大视频 | 欧美18一19性内谢 | 国产老女人精品毛片久久 | 欧美片17c07.com| 国产精品乱码一区二区视频 | 美女露隐私网站 | 精品一性一色一乱农村 | 午夜免费一区二区 | 超碰成人在线免费观看 | 久草视频精品在线 | 久久精品无码一区二区三区 | 久久视频免费在线观看 | 亚洲黄色自拍 | 亚洲午夜精品久久 | 国产精品无码一区二区三区免费 | 欧美挤奶吃奶水xxxxx | 亚洲性图视频 | 日本精品一区二区三区在线观看 | 动漫美女被到爽流 | 国产h视频 | 色人阁五月 | 婷婷久久伊人 | 视色在线 | 人人艹视频 | 国产一区二区三区四区在线观看 | av在线看片 | 最近的中文字幕 | 色综合精品 | 噜噜噜精品欧美成人 | 亚洲欧美日韩久久 | 国产噜噜噜噜久久久久久久久 | 美女扒开尿口让男人捅爽 | 成人免费观看在线视频 |