Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

哪位大牛给个RMQ的代码?我的不知道问题在哪?

Posted by 2008550914 at 2010-03-30 16:32:17 on Problem 3368 and last updated at 2010-03-30 16:33:05
#include<iostream>
#include<cmath>
#define N 100002
using namespace std;

int dpmax[N][18],n,q;
struct Node{
	int data,left,right;
};
Node node[N];

int max(int x,int y){
	if(x>y)
		return x;
	return y;
}

void create_Dpmax(){
	int i,j,l,r,temp;

	for(i=1;i<=n;i++)
		dpmax[i][0]=1;

	for(j=1;j<=log((double)(n+1))/log(2.0);j++)
		for(i=1;i+(1<<j)-1<=n;i++){
			int mid=i+(1<<(j-1))-1;
			temp=max(dpmax[i][j-1],dpmax[i+(1<<(j-1))][j-1]);
			if(node[mid].data==node[mid].data){
				if(node[mid].left<i)
					l=1<<(j-1);
				else
					l=i+(1<<(j-1))-node[mid].left;
				if(node[mid].right>i+(1<<j)-1)
					r=1<<(j-1);
				else
					r=node[mid].right-(i+(1<<(j-1))-1);
				dpmax[i][j]=max(temp,l+r);
			}
			else
				dpmax[i][j]=temp;
		}
}

int getmax(int a,int b){
	int k=(int)(log((double)(b-a+1))/log(2.0));
	return max(dpmax[a][k],dpmax[b-(1<<k)+1][k]);
}

int main(){
	int i,x,y;

	while(scanf("%d",&n),n!=0){
		scanf("%d",&q);
		for(i=1;i<=n;i++)
			scanf("%d",&node[i].data);
		node[1].left=1;
		for(i=2;i<=n;i++)
			if(node[i-1].data==node[i].data)
				node[i].left=node[i-1].left;
			else
				node[i].left=i;
			node[n].right=n;
			for(i=n-1;0<i;i--)
				if(node[i].data==node[i+1].data)
					node[i].right=node[i+1].right;
				else
					node[i].right=i;

				/*
				for(i=1;i<=n;i++)
					cout<<node[i].data<<" "<<node[i].left<<" "<<node[i].right<<endl;
//				*/

				node[i-1].right=i-1;
				create_Dpmax();
				for(i=1;i<=q;i++){
					scanf("%d %d",&x,&y);
					printf("%d\n",getmax(x,y));
				}
	}

	return 0;
}

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator