POJ 2452 (RMQ + 二分)
Sticks Problem
Time Limit: 6000MS
Memory Limit: 65536K
Total Submissions: 10141
Accepted: 2682
Description
Xuanxuan has n sticks of different length. One day, she puts all her sticks in a line, represented by S1, S2, S3, ...Sn. After measuring the length of each stick Sk (1 <= k <= n), she finds that for some sticks Si and Sj (1<= i < j <= n), each stick placed between Si and Sj is longer than Si but shorter than Sj.
Now given the length of S1, S2, S3, …Sn, you are required to find the maximum value j - i.
Input
The input contains multiple test cases. Each case contains two lines.
Line 1: a single integer n (n <= 50000), indicating the number of sticks.
Line 2: n different positive integers (not larger than 100000), indicating the length of each stick in order.
Output
Output the maximum value j - i in a single line. If there is no such i and j, just output -1.
Sample Input
4
5 4 3 6
4
6 5 4 3
Sample Output
1
-1
題意: 給一個長度為n的序列 其中 Si ~ Sj (1<= i < j <= n)為其子序列 問:滿足Si ~ Sj 中任意一個數大於Si 且 小於Sj的序列中,j - i的值最大為多少。
解題思路: 一開始就沒想過暴力,但是其實暴力是可以過的,坑。。。。。
然而我的方法是用RMQ處理出區間最值,然後暴力掃過去,對每一個數 用兩次二分找出 這個數所能形成的最大區間。 (先假設起點為i)兩次二分作用分別為:
第一次:找出i能作為最小值的最大區間位置(其實這個可以用單調棧來處理) 第二次:在第一次找出的區間內尋找出該區間最大值的位置
#include
#include
#include
#include
#include
#include
#include
#include