title: 藍橋模擬_第十題_晚會節目單
categories:
頻繁的查詢區間最值對於遍歷來說開銷非常大,所以產生了一種區間最值查詢這種演算法,本文只講st+rmq,st是稀疏矩陣的意思,這種方法要求資料必須是靜態的不能變化的。
有乙個一位陣列(長度為n),頻繁的查詢[s,e]區間的最值。
定義乙個二維陣列st(大小[n,lgn])。st[i][j]
表示的是從i開始(包括i)向後2j個元素區間的最值,即區間[i,i+2j-1]的最值,那麼很明顯st[i][0]=a[i]
(因為[i,i]只有乙個值)。現在我們開始推導遞推式,[i,i+2j-1]可以按照中間分為兩個大小為2(j-1)的區間[i,i+2(j-1)-1]和[i+2(j-1),i+2j-1],那麼[i,i+2j-1]的最值為這兩個區間再求最值,即[i,i+2j-1]=min/max([i,i+2(j-1)-1],[i+2(j-1),i+2j-1])也就是:
st[i][j]=min/max(st[i][j-1],st[i+2^j][j-1])
那麼就可以發現第j列某個元素值的計算只跟它前一列的某兩個值有關,並且剛剛我們已經算好了第一列,由第一列可以計算第二列,由第二列可以計算第三列……那麼要算到哪一列呢?st[i][j]
表示的區間是[i,i+2j-1]很明顯i+2j-1<=n-1(n個元素,下標0~n-1)所以就有了建st的模板:
void cal(int a,int n)
表示的區間一定有交集。所以要求[s,e]區間最值只需要計算-1<2^-1<=2^k-1將k=log_2(e-s+1)代入得
2k−1−1
<2(
int)
k−1<=2
k−1將
k=lo
g2(
e−s+
1)代入得(e
−s)/
2−1/
2<2(
int)
k−1,
此處2(
int)
k−1是
整數,所
以(e−
s)/2
=<2(
int)
k−
1(e-s)/2-1/2<2^-1,此處2^-1是整數,所以(e-s)/2=<2^-1
(e−s)/
2−1/
2<2(
int)
k−1,
此處2(
int)
k−1是
整數,所
以(e−
s)/2
=<2(
int)
k−1所以s
+2(i
nt)k
−1
>=s
+(e−
s)/2
=(e+
s)/2
(中點)
且e−2
k+
1<=e
−(e+
s)/2
=(e+
s)/2
(中點)
所以s+2^-1>=s+(e-s)/2=(e+s)/2(中點)且e-2^k+1<=e-(e+s)/2=(e+s)/2(中點)
所以s+2(
int)
k−1>=s
+(e−
s)/2
=(e+
s)/2
(中點)
且e−2
k+1<=e
−(e+
s)/2
=(e+
s)/2
(中點)
所以當k=(int)(log2(e-s+1))時,st[s][k],st[e-2^k+1][e]
min/max(st[s][k],st[e-2^k+1][e]),k=(int)(log2(e-s+1))
【問題描述】
小明要組織一台晚會,總共準備了 n 個節目。然後晚會的時間有限,他只能最終選擇其中的 m 個節目。
這 n 個節目是按照小明設想的順序給定的,順序不能改變。
小明發現,觀眾對於晚會的喜歡程度與前幾個節目的好看程度有非常大的關係,他希望選出的第乙個節目盡可能好看,在此前提下希望第二個節目盡可能好看,依次類推。
小明給每個節目定義了乙個好看值,請你幫助小明選擇出 m 個節目,滿足他的要求。
【輸入格式】
輸入的第一行包含兩個整數 n, m ,表示節目的數量和要選擇的數量。
第二行包含 n 個整數,依次為每個節目的好看值。
【輸出格式】
輸出一行包含 m 個整數,為選出的節目的好看值。
【樣例輸入】
5 33 1 2 5 4
【樣例輸出】
3 5 4
【樣例說明】
選擇了第1, 4, 5個節目。
【評測用例規模與約定】
對於 30% 的評測用例,1 <= n <= 20;
對於 60% 的評測用例,1 <= n <= 100;
對於所有評測用例,1 <= n <= 100000,0 <= 節目的好看值 <= 100000。
st+rmq
#include#include #include#include#include#include#define pp(a,b) cout<>n>>m;
_for(i,0,n-1)
cal(a,n);
int s=0,k=m;
while(k!=0)
}
藍橋杯模擬賽最後一題 晚會節目單 線段樹
明天就省賽了,參加的人少,選出10 作為省一感覺有點難度。希望我能再次得個省一,再去次北京,最後能有個好結果吧。大三就結束了,time flies.問題描述 小明要組織一台晚會,總共準備了 n 個節目。然後晚會的時間有限,他只能最終選擇其中的 m 個節目。這 n 個節目是按照小明設想的順序給定的,順...
2023年春節聯歡晚會節目單
關於2015年春節聯歡晚會,不知道我看錯沒有,有個愛情公寓的小品,演員表裡面居然有陳赫,頓時對2015年春節聯歡晚會感興趣了。最近幾年一到了大年三十晚上都是和親戚聊天或者喝朋友們喝酒,或者和一些侄兒子出去放禮花了,這次一定不能錯過2015年春節聯歡晚會。2015年春節聯歡晚會節目單和演員表如下 1 ...
java模擬題第十題 數字黑洞
size medium 任意乙個5位數,比如 34256,把它的各位數字打亂,重新排列,可以得到乙個最大的數 65432,乙個最小的數23456。求這兩個數字的差,得 41976,把這個數字再次重複上述過程 如果不足5位,則前邊補0 如此往復,數字會落入某個迴圈圈 稱為數字黑洞 比如,剛才的數字會落...