记录编号 |
134799 |
评测结果 |
AAAAAAAAAAAAAAAAAA |
题目名称 |
[USACO Jan07] 均衡队形 |
最终得分 |
100 |
用户昵称 |
wolf |
是否通过 |
通过 |
代码语言 |
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