欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

st

程序员文章站 2024-02-01 21:38:34
...

P3865 【模板】ST表
求区间最值
传送门

const int maxn=100005;
int a,n;
int f[maxn][22];
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 x*f;
}
struct ST
{
	void init()
	{
		_1for(i,n)
		{
			scanf("%d",&f[i][0]);
		}
		for(int j=1;j<=21;j++)
		{
			for(int i=1;i+(1<<j)-1<=n;i++)
			{
				f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
			}
		}
	}
	int check(int l,int r)
	{
		int k=log2(r-l+1);	
		return max(f[l][k],f[r-(1<<k)+1][k]);
	}
};
main(void)
{
	int m;
	n=read();
	m=read();
	ST P;
	P.init();
	_1for(i,m)
	{
		int l,r;
		l=read();
		r=read();
		printf("%d\n",P.check(l,r));
	}
}

相关标签: acm