P2048 NOI2010 超級鋼琴

2022-05-01 20:48:10 字數 723 閱讀 2023

和十二省聯考d1t2相似的思路

用堆維護最大值,取出乙個位置之後把這個位置的下乙個值插入堆

注意插入的數有負數,並且開long long

#include #include #include #include #define int long long

using namespace std;

struct qnode

int query(int lroot,int rroot,int l,int r,int kth)

int siz=seg[seg[rroot].rson].sz-seg[seg[lroot].rson].sz,mid=(l+r)>>1;

if(kth>siz)

return query(seg[lroot].lson,seg[rroot].lson,l,mid,kth-siz);

else

return query(seg[lroot].rson,seg[rroot].rson,mid+1,r,kth);

}priority_queueq;

signed main()

for(int i=1;i<=n-lx+1;i++));

}int cnt=0;

while(cntcnt++;

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

return 0;

}

P2048 NOI2010 超級鋼琴

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

洛谷 P2048 NOI2010 超級鋼琴

給出乙個序列,求和最大的k個連續子串行的和,且連續子串行長度在l與r之間.首先預處理出字首和,我們可以從左端點開始考慮,若左端點為i,則右端點在i l 1與i r 1之間,那麼可以計算出這些區間的最大值,然後放到堆裡去,每次從堆中取出最大值加到ans中後再將該區間左右兩區間的最大值放入堆中.也就是說...

洛谷P2048 NOI2010 超級鋼琴 題解

近期發現這篇題解有點爛,更新一下,刪繁就簡,詳細重點。多加了注釋。就醬紫啦!我們需要先算美妙度的字首和,並初始化rmq。迴圈 i 從 1 到 n 因為以i為起點的和弦終點必定是 i l 1 到 i r 1 之間,所以只要在區間內用rmq取超級和弦,並加入以美妙度從小排到大的優先佇列中。取出堆頂元素,...