1. 程式人生 > >RMQ區間最值 倍增求法

RMQ區間最值 倍增求法

void init_rmq(int n)
 {
 	for(int i=1;i<=n;i++)
 	f[i][0]=a[i];
 	
 	for(int j=1;j<=20;j++)
 	 for(int i=1;i<=n;i++)
 	  if(i+(1<<j)-1<=n)
 	  f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);
	}
 
void query_rmq(int i,int j)
 {
 	int k=log(j-i+1)/log(2);
 	return max(f[i][k],f[j-(1<<k)+1][k]);
 	
	}