原題位址
題目描述
為了檢測生產流水線上總共n件產品的質量,我們首先給每一件產品打乙個分數a表示其品質,然後統計前m件產品中質量最差的產品的分值q[m] = min,以及第2至第m + 1件的q[m + 1], q[m + 2] … 最後統計第n - m + 1至第n件的q[n]。根據q再做進一步評估。
請你盡快求出q序列。
輸入輸出格式
輸入格式:
輸入共兩行。
第一行共兩個數n、m,由空格隔開。含義如前述。
第二行共n個數,表示n件產品的質量。
輸出格式:
輸出共n - m + 1行。
第1至n - m + 1行每行乙個數,第i行的數q[i + m - 1]。含義如前述。
輸入輸出樣例
輸入樣例#1:
10 4
16 5 6 9 5 13 14 20 8 12
輸出樣例#1:55
5558
8說明[資料範圍]
30%的資料,n <= 1000
100%的資料,n <= 100000
100%的資料,m <= n, a <= 1 000 000
**:
#include
#include
#include
#include
#include
#include
using namespace std;
int n,m;
int lo[
1000010
],qq[
1000010][
25],ww[
1000010];
//qq[i][j]代表從第i項開始,之後2^j項中最小值
void
build()
}}intrmp
(int l,
int r)
//相等於從前往後找了lo[m]項,再從後往前找了lo[m]項,中間重疊部分搜兩次
intmain()
很多st表問題可以用線段樹或樹狀陣列解決,但往往對於查詢較複雜的情況使用st表。 ST表 學習筆記
概念 st表是用來求解區間最大值的一種優秀的離線演算法,它可以 o n logn o nlogn o nlog n 預處理,然後o 1 查詢,如何實現呢?思想運用了近似於區間dp的方法,乙個大區間有小區間轉移得到,不同的是,我們定義st i k st i k st i k 表示從第i ii個位置起,...
演算法筆記 st表
概述 用倍增法求區間最值的離線演算法,o nlogn 預處理,o 1 訪問。預處理 狀態 st i j i,i 2 j 之間的最值 狀態轉移 如果j等於0,st i j a i 如果j大於0,st i j max st i j 1 st i 2 j 1 j 1 或st i j min st i j ...
ST表學習筆記
st表是一種利用dp思想求解最值的倍增演算法 st表常用於解決rmq問題,即求解區間最值問題 接下來以求最大值為例分步講解一下st表的建立過程 1.定義 f i j 表示 i,i 2j 1 這個長度為2j的區間中的最大值 2.預處理 f i 0 a i 即區間 i,i 的最大值就是a i 3.狀態轉...