求助

P3865 【模板】ST 表

@[yezihao1](/user/346662) ``` for(int k=1;(1<<k)<=n;k++) { for(int i=1;i<=n;i++) { f[k][i]=max(f[k-1][i],f[k-1][i+(1<<(k-1))]); } } ``` 这里给 $i$ 控制一下边界
by y0y68 @ 2022-01-29 17:21:25


@[y0y68](/user/115668) 还是错6个点 ```cpp #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int a[maxn]; int f[maxn][21]; int lg[maxn<<1]; inline int read() { register int f=0,x=0;register char ch=getchar(); while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar(); while(ch>='0'&&ch<='9')x=(x<<3)+(x<<1)+(ch^48),ch=getchar(); return f?-x:x; } inline void write(register int ans,register bool flag) { if(ans<0)putchar('-'),ans=-ans; if(ans==0) { if(!flag) putchar('0'); return ; } write(ans/10,true); putchar(ans%10^'0'); } inline void init() { lg[1] = 0; for (int i = 2 ; i <= 2*maxn ; ++ i) lg[i] = lg[i/2]+1; } int main() { //freopen("P3865_4.in","r",stdin); //freopen("P3865_4.out","w",stdout); init(); int n=read(),m=read(); for(int i=1;i<=n;i++) { a[i]=read(); } for(int i=1;i<=n;i++) { f[0][i]=a[i]; } for(int k=1;(1<<k)<=n;k++) { for(int i=1;i+(1<<k)-1<=n;i++) { f[k][i]=max(f[k-1][i],f[k-1][i+(1<<(k-1))]); } } for(int i=1;i<=m;i++) { int a=read(),b=read(); int len=lg[b-a+1]; write(max(f[len][a],f[len][b-(1<<len)+1]),true); putchar('\n'); } return 0; } ```
by yezihao1 @ 2022-01-29 17:43:12


|