BZOJ 2006 NOI2010 超級鋼琴

2021-08-07 13:21:55 字數 1052 閱讀 1818

orz zzk

最直接的想法是找出所有不同的長度在[l,r]的子段然後選最大的k個加到答案中

但是太暴力沒前途啊

zzk教會我:

首先構造字首和陣列pre

定義乙個三元組max(i,l,r)表示以i為右端點且左端點在[l,r]之間的使pre[i]-pre[t-1]最大的值

(等價於[l,r]中使pre[t-1]最小的值) 其中(l<=t<=r)

顯然ans就是k個最大的這樣的三元組的值的和

可以用st表+堆

首先列舉i,用st表找到最小的pre[t] (作為初始狀態) 放入乙個堆中

然後進行k次查詢:每次找到堆頂計入ans,然後因為需要選出的子段各不相同,把(i,l,r)拆成(i,l,t-1)和(i,t+1,r)放入堆中

#include

#include

#include

#define n 500005

#define rg register

#define ll long long

#define maxlog 20

using

namespace

std;

inline

int read()

while(c>='0'&&c<='9')

return a*f;

}int n,l,r,k;

ll ans;

int pre[n],log[n+5],st[n][maxlog+5];

struct node

bool

operator

< (const node &c) const

};int min(int a,int b)

int query(int x,int y)

priority_queueheap;

int main()

ans=0;

for(i=1;i<=k;++i)

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

return

0;}

bzoj 2006 NOI2010 超級鋼琴

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

BZOJ 2006 NOI2010 超級鋼琴

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

BZOJ 2006 NOI2010 超級鋼琴

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