POJ3264 Balanced Lineup【RMQ】
Balanced Lineup
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 64936 | Accepted: 30249 | |
Case Time Limit: 2000MS |
Description
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One day Farmer John decides to organize a game of Ultimate Frisbee with some of the cows. To keep things simple, he will take a contiguous range of cows from the milking lineup to play the game. However, for all the cows to have fun they should not differ too much in height.
Farmer John has made a list of Q (1 ≤ Q ≤ 200,000) potential groups of cows and their heights (1 ≤ height ≤ 1,000,000). For each group, he wants your help to determine the difference in height between the shortest and the tallest cow in the group.
Input
Line 1: Two space-separated integers, N and Q.
Lines 2..N+1: Line i+1 contains a single integer that is the height of cow i
Lines N+2..N+Q+1: Two integers A and B (1 ≤ A ≤ B ≤ N), representing the range of cows from A to B inclusive.
Output
Lines 1..Q: Each line contains a single integer that is a response to a reply and indicates the difference in height between the tallest and shortest cow in the range.
Sample Input
6 3
1
7
3
4
2
5
1 5
4 6
2 2
Sample Output
6
3
0
Source
題目大意:給你一個數列,查詢區間[l,r]的最大值和最小值的差值,RMQ模板題
AC的C++程式碼:
#include<iostream>
#include<cmath>
using namespace std;
const int N=50010;
int a[N],dpmax[N][30],dpmin[N][30];
void ST(int n)
{
for(int i=1;i<=n;i++)
dpmax[i][0]=dpmin[i][0]=a[i];
for(int j=1;(1<<j)<=n;j++)
for(int i=1;i+(1<<j)-1<=n;i++){
dpmax[i][j]=max(dpmax[i][j-1],dpmax[i+(1<<(j-1))][j-1]);
dpmin[i][j]=min(dpmin[i][j-1],dpmin[i+(1<<(j-1))][j-1]);
}
}
//查詢陣列a的[l,r]區間的最值 【倍增】RMQ的ST表演算法
int RMQ_ST(int l,int r)
{
int k=(int)(log((double)(r-l+1))/log(2.0));
int maxval=max(dpmax[l][k],dpmax[r-(1<<k)+1][k]);
int minval=min(dpmin[l][k],dpmin[r-(1<<k)+1][k]);
return (maxval-minval);
}
int main()
{
int n,q,l,r;
scanf("%d%d",&n,&q);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
ST(n);
while(q--){
scanf("%d%d",&l,&r);
printf("%d\n",RMQ_ST(l,r));
}
return 0;
}
相關文章
- POJ 3264 Balanced Lineup【RMQ問題】MQ
- poj--3264Balanced Lineup+ST演算法求區間最大最小值演算法
- RMQMQ
- Balanced Subsequences
- RMQ模板MQ
- RMQ求lcaMQ
- 淺談RMQMQ
- 線段樹--RMQMQ
- HDU Find the hotel(RMQ)MQ
- 110-Balanced Binary Tree
- $RMQ$問題($ST$表)MQ
- HDU 3183 A Magic Lamp (RMQ)LAMPMQ
- CF1237H Balanced Reversals
- 【Lintcode】1793. Balanced Sales Array
- [題解]SP10606 Balanced Numbers
- HDU 6299-Balanced Sequence(貪心)
- RMQ問題的各種解法MQ
- HDU 2888 Check Corners(二維RMQ)MQ
- RMQ的SSL配置最佳實踐MQ
- RMQ_第一彈_Sparse TableMQ
- HDU 3486 Interviewe(RMQ+二分)ViewMQ
- 資料結構——RMQ(ST表)問題資料結構MQ
- poj--2019Cornfields+二維RMQ問題MQ
- 題解:CF1237E Balanced Binary Search Trees
- LeetCode#110.Balanced Binary Tree(Tree/Height/DFS/Recursion)LeetCode
- P3067 [USACO12OPEN] Balanced Cow Subsets G
- O(n)-O(1) 線性 RMQ 學習筆記MQ筆記
- [題解]P3059 [USACO12NOV] Concurrently Balanced Strings G
- RMQ——支援合併和優先順序的訊息佇列MQ佇列
- 洛谷P3763 [TJOI2017]DNA(字尾陣列 RMQ)陣列MQ
- Luogu P3059 Concurrently Balanced Strings G 題解 [ 紫 ] [ 線性 dp ] [ 雜湊 ] [ 括號序列 ]
- XNMySQL實戰視窗函式SQL分析班級學生考試成績及生活消費rmqMySql函式MQ
- 深度學習基礎5:交叉熵損失函式、MSE、CTC損失適用於字識別語音等序列問題、Balanced L1 Loss適用於目標檢測深度學習熵函式