社区讨论

R7个点求助,有越界判断,开大数组无效

P3865【模板】ST 表 & RMQ 问题参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi7clkds
此快照首次捕获于
2025/11/20 19:28
4 个月前
此快照最后确认于
2025/11/20 19:28
4 个月前
查看原帖
感激不尽!
CPP
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
#include<string>
#include<bitset>
#include<iostream>
#define maxx(a,b) (a>b?a:b)
#define minn(a,b) (a<b?a:b)
#define INF 0x3f3f3f3f
#define maxn 2000010
#define maxm 1000010
using namespace std;
inline int read(){
    char c=getchar();int x=0,f=1;
    while(c!='-'&&(c>'9'||c<'0')) c=getchar();
    if(!(c^'-')){f=-1;c=getchar();}
    while(c>='0'&&c<='9'){x=x*10+c-48;c=getchar();}
    return f*x;
}
int n,m,f[maxn][31],lg[31];
int main(){
	freopen("in.txt","r",stdin);
    cin>>n;cin>>m;
    for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
    for(int i=1;i<=n;i++) f[i][0]=read();
    for(int i=1;i<=30;i++)
      for(int j=1;j<=n-(1<<i)+1;j++)
        f[j][i]=maxx(f[j][i-1],f[j+(1<<(i-1))][i-1]);
    for(int i=1;i<=m;i++){
    	int l=read(),r=read();int t=lg[r-l+1];
    	printf("%d\n",maxx(f[l][t],f[r-(1<<t)+1][t]));
    }
    return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...