FZU2136--取糖果 (線段樹+RMQ)
Problem Description
有N個袋子放成一排,每個袋子裡有一定數量的糖果,lzs會隨機選擇連續的幾個袋子,然後拿走這些袋子中包含最多糖果的袋子。現問你,在選擇x個袋子的情況下,lzs最壞情況下,也就是最少會拿到多少個糖果?對於x取值為1到n都分別輸出答案。
Input
第一行一個整數T,表示有T組數據。
每組數據先輸入一行一個整數N(1<=N<=100000),表示袋子數,接下來一行輸入N個正整數,輸入的第i個數表示第i個袋子所裝的糖果數。
Output
每組數據輸出n行,第i行表示lzs隨機取連續的i個袋子時的最壞情況下能拿到的糖果數。
Sample Input
1
5
1 3 2 4 5
Sample Output
1
3
3
4
5
我是先用rmq預處理區間最大值
然後枚舉每個袋子,往左往右二分得到一個最大的區間,此區間的最大值就是枚舉的袋子上的值,然後說明長度為1 -> R-L+1的區間都可以得到這個值,用線段樹去維護最小值就行了
/*************************************************************************
> File Name: FZU2136.cpp
> Author: ALex
> Mail: [email protected]
> Created Time: 2015年04月23日 星期四 18時24分43秒
************************************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include