POJ 3264 Balanced Lineup(簡單的RMQ)
話說剛開始學習線段樹的時候就拿這題試了一下水,給過了。現在學習RMQ再過一遍,感覺這種方式即好寫又快啊,不錯啊。演算法就不解釋了啊。大家可以看一下劉汝佳寫的大白書。感覺寫的挺好的。
RMQ第一題。
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 31261 | Accepted: 14730 | |
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
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
Sample Input
6 3 1 7 3 4 2 5 1 5 4 6 2 2
Sample Output
6 3 0
#include <algorithm>
#include <iostream>
#include <stdlib.h>
#include <string.h>
#include <iomanip>
#include <stdio.h>
#include <string>
#include <queue>
#include <cmath>
#include <stack>
#include <map>
#include <set>
#define eps 1e-7
#define M 10001000
#define LL __int64
//#define LL long long
#define INF 0x3f3f3f3f
#define PI 3.1415926535898
const int maxn = 505000;
using namespace std;
int Dp_Max[maxn][20];
int Dp_Min[maxn][20];
int num[maxn];
int main()
{
int n, m;
while(~scanf("%d %d",&n, &m))
{
for(int i = 1; i <= n; i++)
scanf("%d",&num[i]);
for(int i = 1; i <= n; i++)
{
Dp_Max[i][0] = num[i];
Dp_Min[i][0] = num[i];
}
for(int j = 1; (1<<j) <= n; j++)
{
for(int i = 1; i+j-1<= n; i++)
{
Dp_Max[i][j] = max(Dp_Max[i][j-1], Dp_Max[i+(1<<(j-1))][j-1]);
Dp_Min[i][j] = min(Dp_Min[i][j-1], Dp_Min[i+(1<<(j-1))][j-1]);
}
}
int Max, Min;
while(m--)
{
int l, r;
int k = 0;
scanf("%d %d",&l, &r);
while(1<<(k+1) <= r-l+1)
k++;
Max = max(Dp_Max[l][k], Dp_Max[r-(1<<k)+1][k]);
Min = min(Dp_Min[l][k], Dp_Min[r-(1<<k)+1][k]);
printf("%d\n",Max-Min);
}
}
return 0;
}
相關文章
- 【RMQ】poj 3264 Balanced LineupMQ
- POJ3264 Balanced Lineup【RMQ】MQ
- POJ 3264 Balanced Lineup【RMQ問題】MQ
- POJ 3264-Balanced Lineup(RMQ-ST演算法)MQ演算法
- POJ 3264 Balanced Lineup 線段樹入門(點的查詢)
- POJ 3264-Balanced Lineup詳解(線段樹區間求值)
- poj--3264Balanced Lineup+ST演算法求區間最大最小值演算法
- B - Gold Balanced Lineup解題報告(張浩盛倫)Go
- poj--2019Cornfields+二維RMQ問題MQ
- POJ 3368 Frequent values (UVA 11235)(RMQ)MQ
- 【簡單搜尋】POJ 2251 Dugeon MasterAST
- POJ 3368-Frequent values(RMQ+離散化-最頻繁的元素)MQ
- POJ3461-KMP演算法的簡單運用KMP演算法
- POJ 2352 Stars(簡單樹狀陣列)陣列
- RMQMQ
- Balanced Subsequences
- RMQ模板MQ
- 淺談RMQMQ
- RMQ求lcaMQ
- 演算法學習之路|POJ-2479最大子串和(簡單dp)演算法
- POJ 2823 單調佇列佇列
- HDU Find the hotel(RMQ)MQ
- RMQ演算法MQ演算法
- 線段樹--RMQMQ
- RMQ的SSL配置最佳實踐MQ
- RMQ問題的各種解法MQ
- 3339: Rmq ProblemMQ
- $RMQ$問題($ST$表)MQ
- POJ 2718簡單列舉貪心演算法(好久沒寫程式碼了。。)演算法
- POJ 3017 單調佇列dp佇列
- Leetcode Balanced Binary TreeLeetCode
- 簡單的單例模式其實也不簡單單例模式
- Kdevelop的簡單使用和簡單除錯dev除錯
- 簡簡單單的Vue2(簡單語法,生命週期,元件)Vue元件
- 簡簡單單的總結,意如生活的平淡
- 【Lintcode】1793. Balanced Sales Array
- Leetcode-Balanced Binary TreeLeetCode
- Balanced Binary Tree leetcode javaLeetCodeJava