poj 3264

rmq

代码:

#include<iostream>
#include<fstream>
#include<cmath>

using namespace std;

int n,m;

int dp[50001][20];
int b[50001][20];
int a[50001];

void read(){
//	ifstream cin("in.txt");
	int i,j,k,s,t;
	cin>>n>>m;
	for(i=1;i<=n;i++)
	//	cin>>a[i];
		scanf("%d",&a[i]);
	for(i=1;i<=n;i++)
	{
		dp[i][0]=a[i];
		b[i][0]=a[i];
	}
	for(j=1;pow(2.,j)<=n;j++)
		for(i=1;i+pow(2.,j)-1<=n;i++)
		{
			dp[i][j]=max(dp[i][j-1],dp[i+(int)pow(2.,j-1)][j-1]);
			b[i][j]=min(b[i][j-1],b[i+(int)pow(2.,j-1)][j-1]);
		}
	for(i=1;i<=m;i++)
	{
//		cin>>j>>k;
		scanf("%d%d",&j,&k);
		s=(int)(log(k-j+1.)/log(2.));
		
		cout<<max(dp[j][s],dp[k-(int)pow(2.,s)+1][s])-min(b[j][s],b[k-(int)pow(2.,s)+1][s])<<endl;
	}
}

int main(){
	read();
	return 0;
}

posted on 2011-05-18 20:11  宇宙吾心  阅读(351)  评论(0)    收藏  举报

导航