记录编号 134799 评测结果 AAAAAAAAAAAAAAAAAA
题目名称 [USACO Jan07] 均衡队形 最终得分 100
用户昵称 Gravatarwolf 是否通过 通过
代码语言 C++ 运行时间 1.573 s
提交时间 2014-10-30 20:12:55 内存使用 0.30 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
#include<bitset>
#include<vector>
#include<deque>
#include<string>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstdio>
using namespace std;
#if defined wolf
ofstream nnew("lineup.in",ios::app);
ifstream fin("lineup.in");
#define fout cout
#else
ifstream fin("lineup.in");
ofstream fout("lineup.out");
#define cout fout
#endif
vector<int> mmax[100];
vector<int> mmin[100];
void _buildRMQ(){
	int n=mmax[0].size();
	mmin[0]=mmax[0];
	for(int j=1;(1<<j)<=n;++j){
		mmax[j].resize(n-(1<<j)+1,0);
		mmin[j].resize(n-(1<<j)+1,0);
		for(int i=0;i+(1<<j)-1<n;++i){
			mmax[j][i]=max(mmax[j-1][i],mmax[j-1][i+(1<<(j-1))]);
			mmin[j][i]=min(mmin[j-1][i],mmin[j-1][i+(1<<(j-1))]);
		}
	}
}
void _findRMQ(int L,int R,int &maxx,int &minn){
	int k=0;
	while((1<<(k+1))<=R-L+1)
		++k;
	maxx=max(mmax[k][L],mmax[k][R-(1<<k)+1]);
	minn=min(mmin[k][L],mmin[k][R-(1<<k)+1]);
}
int main(){
	int n,m;
	fin>>n>>m;
	mmax[0].resize(n);
	for(int i=0;i!=n;++i){
		int e;
		fin>>e;
		mmax[0][i]=e;
	}
	_buildRMQ();
	/*for(int j=0;j!=n;++j){
		for(int i=0;i!=mmax[j].size();++i){
			cout<<mmax[j][i]<<"  ";
		}
		cout<<endl;
	}*/
	for(int i=0;i!=m;++i){
		int a,b,c,d;
		fin>>a>>b;
		--a;--b;
		_findRMQ(a,b,c,d);
		fout<<c-d<<endl;
	}
	return 0;
}
//Designed by wolf
//Thu Oct 30 2014