记录编号 122015 评测结果 AAAAAAAAAAAAAAAAAA
题目名称 [USACO Jan07] 均衡队形 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 1.989 s
提交时间 2014-09-22 12:53:13 内存使用 30.83 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<climits>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define Maxn 200003
using namespace std;
int n,m,mi[Maxn][20]={0},ma[Maxn][20]={0};
int RMQ(int x,int y,bool a){
	if(x>y) swap(x,y);
	int k=0;
	while((1<<(k+1))<=y-x+1) k++;
	if(a) return min(mi[x][k],mi[y-(1<<k)+1][k]);
	else return max(ma[x][k],ma[y-(1<<k)+1][k]);
}
void init(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>mi[i][0];
		ma[i][0]=mi[i][0];
	}
	for(int i=1;(1<<i)<=n;i++)
	{
		for(int j=1;j+(1<<i)-1<=n;j++)
		{
			mi[j][i]=min(mi[j][i-1],mi[j+(1<<(i-1))][i-1]);
			ma[j][i]=max(ma[j][i-1],ma[j+(1<<(i-1))][i-1]);
		}
	}
	int x,y;
	for(int i=1;i<=m;i++)
	{
		cin>>x>>y;
		cout<<RMQ(x,y,false)-RMQ(x,y,true)<<endl;
	}
}
int main(){
	freopen("lineup.in","r",stdin);
	freopen("lineup.out","w",stdout);
	init();
	return 0;
}