求助代老,10分,其他wa
查看原帖
求助代老,10分,其他wa
363495
我爱杨帆楼主2020/9/19 07:41
#include<bits/stdc++.h>
using namespace std;
int read()
{
	char c;
	int r=0,f=1;
	c=getchar();
	while((c<'0'||c>'9')&&c!='-')
	c=getchar();
	if(c=='-')
	{
	f=-1;
    c=getchar();
	}
	while(c>='0'&&c<='9')
	{
	r=r*10+c-'0';
    c=getchar();
	}
	return r*f;
}
int h[100000],dp1[100000][100],dp2[100000][100];
int main()
{   
    memset(dp2,0x3f,sizeof(dp2));
    int n=read(),q=read();
    for(int i=1;i<=n;i++)
    h[i]=read();
    for(int i=1;i<=n;i++)
    {
	dp1[i][0]=h[i];
    dp2[i][0]=h[i];
	}
	for(int j=1;j<=log2(n);j++)
    for(int i=1;i<=n;i++)
    {
	dp1[i][j]=max(dp1[i][j-1],dp1[i+(1<<j-1)][j-1]);
    dp2[i][j]=min(dp2[i][j-1],dp2[i+(1<<j-1)][j-1]);
	}
    for(int i=1;i<=q;i++)
    {
    	int a=read(),b=read();
    	int maxn,minn;
    	int len=log2(b-a+1);
    	maxn=max(dp1[a][len],dp1[b-len][len]);
    	minn=min(dp2[a][len],dp2[b-len][len]);
    	cout<<maxn-minn<<endl;
	}
}
2020/9/19 07:41
加载中...