80分求助!最后两个点TLE!为什么
查看原帖
80分求助!最后两个点TLE!为什么
725231
march_Wu175楼主2023/8/15 23:31
#include  <bits/stdc++.h>
using  namespace  std;
int  n,m;
int  logx[100005];
int  st[100005][25];
inline int read(){
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
void log2(){
	 logx[1]=0;
	 for(int i=2;i<=n;i++)
	 	logx[i]=logx[i>>1]+1;
}
int  main(){  
	 n=read(),m=read();
	 log2();
	 for(int i=1;i<=n;i++)
	 	st[i][0]=read();
	 for(int i=1;i<=logx[n];i++){
	 	for(int j=1;j+(1<<i)-1<=n;j++){
	 		st[j][i]=max(st[j][i-1],st[j+(1<<(i-1))][i-1]);
		 }
	 }
	 while(m--){
	 	int  l=read(),r=read();
	 	int  d=logx[r-l+1];
		int  ans=max(st[l][d],st[r-(1<<d)+1][d]);
		cout<<ans<<endl;
	 }
	 return  0;
}
2023/8/15 23:31
加载中...