社区讨论
ST模版,玄关
P3865【模板】ST 表 & RMQ 问题参与者 3已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @m4mmpo3q
- 此快照首次捕获于
- 2024/12/13 18:52 去年
- 此快照最后确认于
- 2025/11/04 23:22 4 个月前
rt,
CPP#include<bits/stdc++.h>
using namespace std;
const int MN=2*1e6+1;
int f[MN][20];
inline int read()
{
int x=0,f=1;char ch=getchar();
while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
return x*f;
}
int pw[21];
inline void cpw(){
pw[0]=1;
for(int i=1;i<=20;i++)
{
pw[i]=pw[i-1]*2;
}
return ;
}
int lg[MN];
inline void clg(){
lg[1]=0;
for(int i=2;i<=MN;i++)
{
lg[i]=pw[(int)log2(i)];
}
return ;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cpw();
clg();
int n=read(),m=read();
int a[n+1];
for(int i=1;i<=n;i++)
{
a[i]=read();
f[i][0]=a[i];
}
for(int j=1;j<=20;j++)
{
for(int i=1;i<=n;i++)
{
if(i+pw[j]-1<=n)
{
f[i][j]=max(f[i][j-1],f[i+pw[j-1]][j-1]);
}
}
}
for(int i=1,x,y;i<=m;i++)
{
x=read();
y=read();
int t=lg[y-x];
int p1=f[x][t];
int p2=f[y-pw[t]+1][t];
cout<<max(p1,p2)<<endl;
}
return 0;
}
样例没过,求改(应该是状态转移方程的问题)
回复
共 12 条回复,欢迎继续交流。
正在加载回复...