求问,虽然AC了...
查看原帖
求问,虽然AC了...
238203
跟你沟通楼主2020/11/1 15:29

如下,bin[i]存的是2^i,logg[i]存的是log2(i) 但是这两个数组为什么要开到10^6呢?不是开到log2(10^6)也就是24(---加到30凑个整)就可以了吗? 但是开小了有60%测试点RE

#include<bits/stdc++.h>
using namespace std;
int n,m,f[110000][30],logg[110000],bin[110000],x,y,t,k;
int my_max(int a,int b){return a>b?a:b;}
void init()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&f[i][0]);
	logg[0]=-1;	bin[0]=1;
	for(int i=1;i<=30;++i) bin[i]=bin[i-1]*2;
	for(int i=1;i<=n;++i) logg[i]=logg[i/2]+1;
	for(int j=1;j<=logg[n];++j)
		for(int i=1;i<=n;++i)
			if(i+bin[j]-1<=n)
				f[i][j]=my_max(f[i][j-1],f[i+bin[j-1]][j-1]);
}
void st()
{
	for(int i=1;i<=m;++i)
	{
		scanf("%d%d",&x,&y);
		t=y-x+1;k=logg[t];
		printf("%d\n",my_max(f[x][k],f[y-bin[k]+1][k]));
	}
}
int main()
{
	init();
	st();
}
2020/11/1 15:29
加载中...