poj 3264 Balanced Lineup
2013-08-16 09:31
239 查看
题目链接:http://poj.org/problem?id=3264
解题思路:RMQ (Range Minimum/Maximum Query).
解题思路:RMQ (Range Minimum/Maximum Query).
/////////////////////////////////////////////////////////////////////////// //problem_id: poj 3264 //user_id: SCNU20102200088 /////////////////////////////////////////////////////////////////////////// #include <algorithm> #include <iostream> #include <iterator> #include <iomanip> #include <cstring> #include <cstdlib> #include <string> #include <vector> #include <cstdio> #include <cctype> #include <cmath> #include <queue> #include <stack> #include <list> #include <set> #include <map> using namespace std; /////////////////////////////////////////////////////////////////////////// typedef long long LL; const double PI=acos(-1.0); /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// //Add Code: //Min[i][j]表示从i开始,长度为2^j的一段元素的最小值 //Max[i][j]表示从i开始,长度为2^j的一段元素的最大值 int h[50005],Min[50005][20],Max[50005][20]; int min(int a,int b){ return a<b? a:b; } int max(int a,int b){ return a>b? a:b; } void RMQ_init(int n){ int i,j; for(i=1;i<=n;i++) Max[i][0]=Min[i][0]=h[i]; for(j=1;(1<<j)<=n;j++){ for(i=1;i+(1<<j)-1<=n;i++){ //递推求Min[i][j],Max[i][j] Min[i][j]=min(Min[i][j-1],Min[i+(1<<(j-1))][j-1]); Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]); } } } int RMQ(int L,int R){ int k=0; while((1<<(k+1))<=R-L+1) k++; //求满足2^k<=R-L+1的最大的k return max(Max[L][k],Max[R-(1<<k)+1][k])-min(Min[L][k],Min[R-(1<<k)+1][k]); } /////////////////////////////////////////////////////////////////////////// int main(){ /////////////////////////////////////////////////////////////////////// //Add code: int n,q,a,b,i; scanf("%d%d",&n,&q); for(i=1;i<=n;i++) scanf("%d",&h[i]); RMQ_init(n); while(q--){ scanf("%d%d",&a,&b); printf("%d\n",RMQ(a,b)); } /////////////////////////////////////////////////////////////////////// return 0; } /////////////////////////////////////////////////////////////////////////// /* Testcase: Input: 6 3 1 7 3 4 2 5 1 5 4 6 2 2 Output: 6 3 0 */ ///////////////////////////////////////////////////////////////////////////
相关文章推荐
- 【POJ 3264】Balanced Lineup
- POJ 3264 Balanced Lineup (ST算法入门)
- poj 3264 Balanced Lineup 线段树+RMQ_ST算法 一题多解
- poj 3264 Balanced Lineup
- 【POJ 3264 Balanced Lineup】 线段树
- POJ3264——Balanced Lineup(线段树)
- POJ 3264 Balanced Lineup 【RMQ裸题 】
- POJ 3264 Balanced Lineup 【RMQ求区间最值模板题】
- POJ 3264 Balanced Lineup(ST)
- POJ 3264 Balanced Lineup(ST表)
- poj 3264 Balanced Lineup(线段数求区间最大最小值)
- POJ 3264 Balanced Lineup 线段树求区间最大最小(普通线段树,ZKW线段树)
- POJ 3264--Balanced Lineup(RMQ问题)
- POJ 3264 Balanced Lineup (RMQ)
- POJ 3264-Balanced Lineup(线段树:单点更新,区间查询)
- poj 3264 Balanced Lineup(基础线段树)
- POJ 3264 Balanced Lineup 线段树
- POJ 3264 Balanced Lineup
- POJ-3264 Balanced Lineup(线段树插点问线)
- POJ3264 Balanced Lineup (RMQ & ST)