ST表真的不能做吗
查看原帖
ST表真的不能做吗
616964
Adolfo_North楼主2023/9/25 21:38

MLE了两个点,好像听说过滚动数组优化的方法,但不会改

#include<bits/stdc++.h>
using namespace std;
const int N=1e6*2+1;
int a[N],f[N][22],lg[N];
int n,m;
void init(){
	int t=log(n)/log(2)+1;
	for(int j=1;j<t;j++){
		for(int i=1;i<=n-(1<<j)+1;i++){
			f[i][j]=min(f[i][j-1],f[i+(1<<j-1)][j-1]);
		}
	}
	for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
}
int query(int l,int r){
	int k=lg[r-l+1];
	return min(f[l][k],f[r-(1<<k)+1][k]);
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		f[i][0]=a[i];
	}
	init();
	cout<<0<<endl;
	for(int i=2;i<=n;i++){
		if(i<=m) cout<<query(1,i-1)<<'\n';
		else cout<<query(i-m,i-1)<<'\n';
	}
	return 0;
}
2023/9/25 21:38
加载中...