WA+TLE求调

P3865 【模板】ST 表

首先你st数组中两个变量的位置都反了,把每一个的i和j的部分交换就行。然后输入输出要用scanf和printf或者快读快写,因为这题时间只有0.8s
by liuzr156 @ 2023-01-09 20:25:23


@[dengjiaqiang](/user/638718) ~~好像还是要用快读~~ ```cpp #include <iostream> #include <cstdio> #include <cmath> #define int unsigned long long using namespace std; const int N=1e5+10; int st[N][25],a[N],n,m,lg[N]; 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; } void ST() { for(int i = 1; i<=n; i++)st[i][0] = a[i]; int p = log(n)/log(2); for(int k = 1; k<=p; k++) { for(int i = 1; i<=n-(1<<k)+1; i++) { st[i][k] = max(st[i][k-1],st[i+(1<<(k-1))][k-1]); } } } int query(int l,int r) { int p = lg[r-l+1]; return max(st[l][p],st[r-(1<<p)+1][p]); } signed main() { scanf("%d%d",&n,&m); for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } ST(); while(m--){ int l,r; l=read(),r=read(); printf("%d\n",query(l,r)); } return 0; } ```
by liuzr156 @ 2023-01-09 20:32:30


@[dengjiaqiang](/user/638718) 我的建议是去写策略游戏![](//图.tk/0)
by Light_az @ 2023-01-09 20:56:06


屑屑你
by xueruo @ 2023-01-09 20:58:19


|