藍橋杯模擬賽最後一題 晚會節目單 線段樹

2021-10-07 18:46:07 字數 1545 閱讀 3042

明天就省賽了,參加的人少,選出10%作為省一感覺有點難度。希望我能再次得個省一,再去次北京,最後能有個好結果吧。大三就結束了,time flies.

【問題描述】

小明要組織一台晚會,總共準備了 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。

#include

using

namespace std;

int n,m;

int data[

100005];

struct point

;point tree[

400005];

void

pushup

(int k)

void

build

(int k,

int a,

int b)

int m=

(a+b)/2

;build(2

*k,a,m)

;build(2

*k+1

,m+1

,b);

pushup

(k);

}int

query

(int k,

int a,

int b)

int m=

(tree[k]

.l+tree[k]

.r)/2;

if(b<=m)

else

if(a>m)

else

}int

main()

build(1

,1,n);

int pos1=

1,pos2=n-m+1;

//尺取法,在乙個區間內求最大值

int pos_m=0;

while

(pos1while

(pos2<=n)

cout

}

藍橋模擬 第十題 晚會節目單

title 藍橋模擬 第十題 晚會節目單 categories 頻繁的查詢區間最值對於遍歷來說開銷非常大,所以產生了一種區間最值查詢這種演算法,本文只講st rmq,st是稀疏矩陣的意思,這種方法要求資料必須是靜態的不能變化的。有乙個一位陣列 長度為n 頻繁的查詢 s,e 區間的最值。定義乙個二維陣...

2023年藍橋杯省賽A組第一題 迷宮

題目 x星球的一處迷宮遊樂場建在某個小山坡上。它是由10x10相互連通的小房間組成的。房間的地板上寫著乙個很大的字母。我們假設玩家是面朝上坡的方向站立,則 l表示走到左邊的房間,r表示走到右邊的房間,u表示走到上坡方向的房間,d表示走到下坡方向的房間。x星球的居民有點懶,不願意費力思考。他們更喜歡玩...

藍橋杯 十二屆第一次模擬賽題E

在乙個序列 a a 1 a 2 a n 中,如果 i,j 滿足 i j 且 a i a j 則稱為乙個逆序對。例如 3,2,2,1 中包含 6 個逆序對。請問在 87,39,35,1,99,10,54,1,46,24,74,62,49,13,2,80,24,58,8,14,83,23,97,85,3...