程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ 3264 Balanced Lineup 線段樹RMQ

POJ 3264 Balanced Lineup 線段樹RMQ

編輯:C++入門知識

 

題目大意:

給定N個數,還有Q個詢問,求每個詢問中給定的區間[a,b]中最大值和最小值之差。

思路:

依舊是線段樹水題~

 

 

#include
#include
#include
using namespace std;
const int MAXN=50000+10;
const int MAXM=MAXN<<2;
const int INF=0x3fffffff;
int maxv[MAXM],minv[MAXM],a[MAXN];

void build(int k,int L,int R)
{
	if(L==R) 
	{
		maxv[k]=a[L];
		minv[k]=a[L];
	}
	else
	{
		int m=(L+R)>>1;
		build(k<<1,L,m);
		build((k<<1)+1,m+1,R);
		maxv[k]=max(maxv[k<<1],maxv[(k<<1)+1]);
		minv[k]=min(minv[k<<1],minv[(k<<1)+1]);
	} 
}

int query_max(int k,int L,int R,int a,int b)
{
	int ans=-INF;
	if(a<=L && R<=b) return maxv[k];
	else
	{
		int m=(L+R)>>1;
		if(a<=m) ans=max(ans,query_max(k<<1,L,m,a,b));
	    if(m>1;
		if(a<=m) ans=min(ans,query_min(k<<1,L,m,a,b));
		if(m

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved