比赛 测试 评测结果 WWWWWWWWWWWWWWWWWW
题目名称 均衡队形 最终得分 0
用户昵称 liuyu 运行时间 3.062 s
代码语言 C++ 内存使用 11.76 MiB
提交时间 2017-04-11 20:38:59
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
struct RMQ{
	int N;
	int maxx[50020][30],minn[50020][30];
	void inin()
	  {
	  	for(int i=1;i<=N;i++)
	  	 scanf("%d",&maxx[i][0]);
	  	memcpy(minn,maxx,sizeof(maxx));
	  }
	void aa()
	{
		for(int i=1;(1<<i)<=N;i++)
		 for(int j=1;j+(1<<i)-1<=N;j++)
		   {
		   	 maxx[j][i]=max(maxx[j+(1<<i-1)][i-1],maxx[j][i-1]);
		   	 minn[j][i]=min(minn[j+(1<<i-1)][i-1],minn[j][i-1]);
		   }
	}
	void Query(int a,int b,int x,int y)
	{
	    int Max=0,Min=0;
		for(int i=0;(1<<(i+1)<=b-a+1);i++)
		 {
		 	Max=max(maxx[a][i],maxx[b-(1<<i)+1][i]);
		 	Min=min(minn[a][i],minn[b-(1<<i)+1][i]);
		 }
		x=Max;
		y=Min;
	}
	
}RMQ1;
int main()
{
	freopen("lineup.in","r",stdin);
	freopen("lineup.out","w",stdout);
    int Q;
	scanf("%d%d",&RMQ1.N,&Q);
	RMQ1.inin();
	RMQ1.aa();
	int l,r;
	for(int t=1;t<=Q;t++)
	  {
	  	scanf("%d%d",&l,&r);
	  	int x=0;
	  	int y=(1<<30);
	  	RMQ1.Query(l,r,x,y);
	  	cout<<x-y<<endl;
	  }
	  
	return 0;
}