BZOJ 2006 NOI2010 超級鋼琴

2022-08-19 21:21:10 字數 620 閱讀 7419

題目大意:

乙個區間的價值為區間內所有數的和。

求序列中長度在l至r的區間中價值前k大的區間的價值和。

題解:乙個區間價值用s[r]-s[l]來表示,s為字首和。假設固定了右端點,則可以通過st表來確定左端點的最優位置。對於所有的右端點,我們將他們扔進堆裡就能找出最大值來。

然後對於乙個右端點確定了乙個左端點,之後對於這個右端點這個左端點就不能選了,所以把原來區間斷成兩端,再扔進堆裡。重複k次就可以了。

**:

#include#include#include#define ma make_pair

#define pr pair#define prr pair#define mp make_pair

#define fr first

#define sc second

using namespace std;

int n,k,l,r,a[1000005],lg[1000005],st[500005][21],sum[1000005];

priority_queueq;

int calc(int a,int b)

printf("%lld\n",ans);

return 0;

}

bzoj 2006 NOI2010 超級鋼琴

小z是乙個小有名氣的鋼琴家,最近c博士送給了小z一架超級鋼琴,小z希望能夠用這架鋼琴創作出世界上最美妙的 這架超級鋼琴可以彈奏出n個音符,編號為1至n。第i個音符的美妙度為ai,其中ai可正可負。乙個 超級和弦 由若干個編號連續的音符組成,包含的音符個數不少於l且不多於r。我們定義超級和弦的美妙度為...

BZOJ 2006 NOI2010 超級鋼琴

orz zzk 最直接的想法是找出所有不同的長度在 l,r 的子段然後選最大的k個加到答案中 但是太暴力沒前途啊 zzk教會我 首先構造字首和陣列pre 定義乙個三元組max i,l,r 表示以i為右端點且左端點在 l,r 之間的使pre i pre t 1 最大的值 等價於 l,r 中使pre t...

BZOJ 2006 NOI2010 超級鋼琴

time limit 20 sec memory limit 552 mb submit 3254 solved 1604 小z是乙個小有名氣的鋼琴家,最近c博士送給了小z一架超級鋼琴,小z希望能夠用這架鋼琴創作出世界上最美妙的 這架超級鋼琴可以彈奏出n個音符,編號為1至n。第i個音符的美妙度為ai...