5个超时 咋办
查看原帖
5个超时 咋办
423270
l17663843890楼主2021/4/23 17:32
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int N=100001;
int n,m;
int log2[N],a[N];
int larger[N][22];
int read()
{
	int ans=0;
	char c=getchar();
	while(!isdigit(c))
	c=getchar();
	while(isdigit(c))
	{
		ans=ans*10+c-'0';
		c=getchar();
	}
	return ans;
}
int main()
{
		n=read();
		m=read();
	for(int i=1;i<=n;i++)
	{
		
		larger[i][0]=read();
	}
	for(int i=2;i<=n;i++)
	{
		log2[i]=log2[i/2]+1;
	}
	for(int i=1;i<22;i++)
	{
		for(int j=1;j+(1<<i)-1<=n;j++){
			larger[j][i]=max(larger[j][i-1],larger[j+(1<<(i-1))][i-1]);
		}
	}
	for(int i=1;i<=m;i++)
	{
		int	 l,r;
		l=read();
		r=read();
		int s=log2[r-l+1];
	
		cout<<	max(larger[l][s],larger[r-(1<<s)+1][s])<<endl; 
		
	}
 } 
2021/4/23 17:32
加载中...