【模板】 ST表

时间:2022-04-20 22:45:33

某dalao的代码

 void ST(int n) {
for (int i = ; i <= n; i++)
dp[i][] = A[i];
for (int j = ; ( << j) <= n; j++) {
for (int i = ; i + ( << j) - <= n; i++) {
dp[i][j] = max(dp[i][j - ], dp[i + ( << (j - ))][j - ]);
}
}
}
int RMQ(int l, int r) {
int k = ;
while (( << (k + )) <= r - l + ) k++;
return max(dp[l][k], dp[r - ( << k) + ][k]);
}

我莫名WA的题

 #include<bits/stdc++.h>
#define maxn 100010
using namespace std;
int stmin[maxn][];
int stmax[maxn][];
int n,m;
void st(){
for(int j=;(<<j)<=n;j++)
for(int i=;i+(<<i)- <= n ;i++){
stmin[i][j] =min(stmin[i][j-],stmin[i+(<<(j-))][j-]);
stmax[i][j] =min(stmax[i][j-],stmax[i+(<<(j-))][j-]);
}
}
int rmq_max (int l,int r){
int k=;
while(( <<(k+) ) <=(r-l+) ) k++;
return max(stmax[l][k],stmax[r-(<<k)+][k]);
}
int rmq_min (int l,int r){
int k=;
while(( <<(k+) ) <=(r-l+) ) k++;
return min(stmin[l][k],stmin[r-(<<k)+][k]);
}
int main(void){
cin>>n>>m;
for(int i=;i<=n;i++) cin>>stmin[i][];
st();
for(int i=;i<m-;i++) cout<<<<endl;
for(int i=m;i<=n+;i++){
cout<<rmq_min(i-m,i)<<endl;
}
}

困得不行,可能是个傻逼错误qwq

改天再改