ST表TLE求助【蒟蒻】
查看原帖
ST表TLE求助【蒟蒻】
243961
Colead楼主2022/1/23 21:52

球球了。查询不是O(1)吗?

#include<bits/stdc++.h>
using namespace std;
long long n,m,lx,rx;
long long a[100005]={};
long long ST[101][100005]={};
long long loog[100005]={};
void STvoid()
{
	for(int i=1;i<=n;i++)
	{
		ST[0][i]=a[i];
	}
	long long p=loog[n];
	for(int k=1;k<=p;k++)
	{
		for(int i=1;i<=n-(1<<k)+1;i++)
		{
			ST[k][i]=max(ST[k-1][i],ST[k-1][i+(1<<(k-1))]);
		}
	}
	return;
}
long long pix(long long l,long long r)
{
	long long p=loog[r-l+1];
	return max(ST[p][l],ST[p][r-(1<<p)+1]);
}
int main()
{
	cin>>n>>m;
	loog[1]=0;
	for(int i=2;i<=n;i++)
	{
		loog[i]=loog[i>>1]+1;
	}
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	STvoid();
	for(int i=1;i<=m;i++)
	{
		cin>>lx>>rx;
		cout<<pix(lx,rx)<<endl;
	}
	return 0;
}
2022/1/23 21:52
加载中...