入門者筆記 ST表

2021-09-14 00:48:33 字數 1192 閱讀 5257

原題位址

題目描述

為了檢測生產流水線上總共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.狀態轉...