主席樹 HYSBZ 2006 超級鋼琴

2021-09-02 02:40:57 字數 1782 閱讀 3097

小z是乙個小有名氣的鋼琴家,最近c博士送給了小z一架超級鋼琴,小z希望能夠用這架鋼琴創作出世界上最美妙的

**。 這架超級鋼琴可以彈奏出n個音符,編號為1至n。第i個音符的美妙度為ai,其中ai可正可負。 乙個「超級

和弦」由若干個編號連續的音符組成,包含的音符個數不少於l且不多於r。我們定義超級和弦的美妙度為其包含的

所有音符的美妙度之和。兩個超級和弦被認為是相同的,當且僅當這兩個超級和弦所包含的音符集合是相同的。 

小z決定創作一首由k個超級和弦組成的樂曲,為了使得樂曲更加動聽,小z要求該樂曲由k個不同的超級和弦組成。

我們定義一首樂曲的美妙度為其所包含的所有超級和弦的美妙度之和。小z想知道他能夠創作出來的樂曲美妙度最

大值是多少。

input

第一行包含四個正整數n, k, l, r。其中n為音符的個數,k為樂曲所包含的超級和弦個數,l和r分別是超級和弦所

包含音符個數的下限和上限。 接下來n行,每行包含乙個整數ai,表示按編號從小到大每個音符的美妙度。

n<=500,000

k<=500,000

-1000<=ai<=1000,1<=l<=r<=n且保證一定存在滿足條件的樂曲

output

只有乙個整數,表示樂曲美妙度的最大值。

sample input

4 3 2 3 3 2 -6 8

sample output

11 【樣例說明】 共有5種不同的超級和弦: 音符1 ~ 2,美妙度為3 + 2 = 5 音符2 ~ 3,美妙度為2 + (-6) = -4 音符3 ~ 4,美妙度為(-6) + 8 = 2 音符1 ~ 3,美妙度為3 + 2 + (-6) = -1 音符2 ~ 4,美妙度為2 + (-6) + 8 = 4 最優方案為:樂曲由和弦1,和弦3,和弦5組成,美妙度為5 + 2 + 4 = 11。

最開始加個0,為了防止越界

用字首和建樹

給你n個數,讓你選k段不同的區間,規定每段區間的長度為l-r,問你最大的sum是多少

我們可以儲存字首區間,那麼這一段區間內最大的區間和就是當前區間內的最小的字首和

我們用字首和建主席樹,掃一遍,得到以當前數為末尾的合法長度內的最大和(就是該區間(l-1-r-1)內的最小數)

eg:a[i]+a[i+1]+a[i+2]+a[i+3]=pre_sum[i+3]-pre_sum[i-1];

所以我們每次查以i為右端點的合法區間內的第k小,最開始是第一,放進優先佇列裡,彈出乙個,補回這個的第k_min+1大

wa了半天,竟然是陣列開的不夠大

哭了!!!!!!!

#include using namespace std;

const int maxn=5e5+10;

int t[maxn],l[maxn*44],r[maxn*44],tree[maxn*44];

int l[maxn],r[maxn],a[maxn],b[maxn],tot;

void build(int &rt,int l,int r)

void update(int &rt,int l,int r,int pre,int x)

int query(int s,int e,int l,int r,int k)

struct node

;priority_queue q;

bool operator<(const node &x,const node &y)

// cout<=x.k_min+1)

}printf("%lld\n",anss);

return 0;

}

主席樹 初學

現在才開始學主席樹 弱 不過不帶修改的話 還是很簡單的嘛。或者說應該叫可持久化線段樹?首先對數的區間進行離散化,這樣下面的a i 都預設為離散化以後的結果了。對於每個1.i開乙個線段樹,對於這個線段樹中的每乙個節點 l,r 表示1.i中在 l,r 中的數的個數。顯然這n個線段樹的形態大小是完全一樣的...

主席樹 模板

思想 主席樹就是一顆持久化線段樹,為什麼叫持久化了,因為它可以儲存之前的線段樹版本,並且可以拿來用,從而優化空間.至於為什麼叫主席樹了,大概是因為發明這個演算法的人的名字的緣故吧 詳細說說 主席樹是一種離線資料結構,是由很多棵線段樹組成的。第i棵線段樹存的是前i個數的資訊 每乙個線段存數字的出現次數...

主席樹模板

維護n棵1 i的字首權值線段樹,每次查詢減一下就好了。poj 2104就是模板題,裸的靜態第k大,需要先離散化,不會的就用lower bound 多試試,研究研究應該就能懂。include include include include using namespace std const int m...