8分求助TLE(开了O2)

P3865 【模板】ST 表

@[yyy_Logic](/user/877156) 第18行 `if(c=='-')`-> `if(c=='-') f=-1;`
by yuanxiuan @ 2023-07-29 20:01:38


或者直接删掉也行
by yuanxiuan @ 2023-07-29 20:02:41


@[yuanxiuan](/user/614716) 改了 还是8分TLE QAQ ```cpp #include<bits/stdc++.h> //#include<cstdio> //#include<cmath> //#include<algorithm> using namespace std; typedef long double ld; typedef long long ll; #define endl '\n' #define test printf("\ntest\n") /*·········································*/ const int N = 1e6+10; int Max[N][20];//Max[i][j]表示第i个数到其后面第2的j次方的数中的最大值 int n,m; inline int read(){ char c=getchar(); int x=0,f=1; while(c<'0'||c>'9'){ if(c=='-'){ f=-1; c=getchar(); } } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } return f*x; } inline void write(int x) { if(x<0)putchar('-'),x=-x; if(x>9)write(x/10); putchar(x%10+'0'); } inline int query(int l ,int r){ // int log2[N]; // log2[1]=0; // for(int i=2;i<=n;i++){//预存log2的值 // log2[i]=log2[i>>1]+1; // } // int k=log2[r-l+1]; int k=log2(r-l+1); return max(Max[l][k],Max[r-(1<<k)+1][k]); } inline void solve() { n=read(),m=read(); for(int i=1;i<=n;i++)//初始化区间(i,i)的最大值为其本身 Max[i][0]=read(); //关键 for(int j=1;j<=20;j++){ for(int i=1;i<=n-(1<<j)+1;i++){//注意边界 Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);//(1<<(j-1))相当于2的j-1次方 } } for(int i=1;i<=m;i++){ int l=read(),r=read(); write(query(l,r)); printf("\n"); } } int main() { // ios::sync_with_stdio(0); // cin.tie(0),cout.tie(0); int t = 1; // cin>>t; while(t--) solve(); return 0; } ```
by yyy_Logic @ 2023-07-30 23:33:47


@[yyy_Logic](/user/877156) 这样 ```cpp inline int read(){ char c=getchar(); int x=0,f=1; while(c<'0'||c>'9'){ if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9'){ x=x*10+c-'0'; c=getchar(); } return f*x; } ```
by yuanxiuan @ 2023-07-31 07:47:37


@[yuanxiuan](/user/614716) 过了!!原来是快读超时了QAQ 谢谢佬佬!!! Orz
by yyy_Logic @ 2023-07-31 11:00:56


|