ST表求(无修)RMQ问题

用ST表在某些出题人故意的题目中可以避免线段树导致的卡常问题

const int N=1e5+5;
int pre[N],f[N][20];

void solve(){
	int n,m;cin>>n>>m;
    pre[1]=0;
    for(int i=2;i<=n;i++) pre[i]=pre[i>>1]+1;
    for(int i=1;i<=n;i++) cin>>f[i][0];

    for(int j=1;j<=pre[n];j++){
        for(int i=1;i<=(n-(1<<j))+1;i++){
            f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
        }
    }
    int x,y;
    for (int i=1;i<=m;i++){
		cin>>x>>y; int l=pre[y-x+1];
		cout<<max(f[x][l],f[y-(1<<l)+1][l])<<endl;
	}
}

posted on 2024-09-10 19:59  TaopiTTT  阅读(1)  评论(0编辑  收藏  举报