bzoj3936 Noi2017 蔬菜 貪心

2021-08-15 03:25:11 字數 1046 閱讀 2066

【題目描述】

【題解】

這道題可以從後往前貪心。

若我們知道了第i的答案,我們只要去掉(當前個數-前i-1天能取的個數)個價值最小的蔬菜,就能得到第i-1天的答案。

所以我們現在只要求出最後一天的答案。

把每種蔬菜拆成兩份,前c-1個價值為a,最後乙個價值為a+s(按變質的順序)放入優先佇列中,依次取出來放入還能放的地方即可。

還能放的地方可以用並查集維護。

複雜度o(n log n)。

/* --------------

user vanisher

problem bzoj-4946

----------------*/

# include # define ll long long

# define n 1000100

using namespace std;

ll read()

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

return tmp*fh;

}struct node;

bool operator <(node x, node y)

int main()); hp.push((node));

} else );

hp.push((node));

} }mx=100000;

for (ll i=1; i<=k; i++) p[i]=read(),mx=max(p[i],mx);

for (ll i=1; i<=mx; i++) f[i]=i, num[i]=m;

while (hp.size()!=0)

else

} }sort(mp+1,mp+cnt+1);

ll tot=mx*m,now=ans[mx],l=1;

for (ll i=mx-1; i>=1; i--)

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

printf("%lld\n",ans[p[i]]);

return 0;

}

BZOJ 4942 NOI2017 整數 分塊

bzoj 洛谷uoj 可能是退役之前最後乙個bzoj rank1了?參考這裡。如果沒有減法,對乙個二進位制數暴力進製,均攤複雜度是 o 1 的 要進 o n 次位就至少需要 o n 次操作 但是這題有減法.顯然暴力進製就不對了。那麼我們把減法變成加法,分別維護加上的數 inc 和減掉的數 dec 是...

刷題 BZOJ 4946 Noi2017 蔬菜

網上大部分都是並查集寫法,但是有大神寫了非並查集寫法,特別容易理解 首先 s i 的限制,只需將每乙個蔬菜分出乙個價值為 a i s i 且過期時間為該蔬菜最晚的一天的蔬菜 把時間倒序之後,問題轉化為每個蔬菜會在第幾天出現,每天貪心選擇價值最大的即可 先求出 max 的答案,然後遞推 1,max 1...

NOI2017 蚯蚓排隊

嘟嘟嘟 現在看來這道題還不是特別難。別一看到字串就想sam 看到 k 很小,所以我們可以搞乙個單次修改複雜度跟 k 有關的演算法。能想到,每一次斷開或鏈結,最多隻會影響 k 2 個長度為 k 的區間。所以我們開乙個雜湊表,每一次拼接時就往雜湊表裡加入 k 2 個新的雜湊值,斷鏈的時候就把這些雜湊值減...