洛谷p2827蚯蚓題解

2022-04-10 04:41:19 字數 1153 閱讀 4390

題目

演算法標籤裡的演算法什麼的都不會啊

什麼二叉堆??

qbxt出去學習的時候講的,一段時間之前做的,現在才寫到部落格上的

維護3個佇列,佇列1表示最開始的蚯蚓,佇列2表示每一次被切的蚯蚓被分開的較長的那一部分,佇列3表示每一次被切的蚯蚓被分開的較短的那一部分。

我們先把原序列排序,因為不管怎麼切,先被切的蚯蚓分成的兩部分一定比後切的蚯蚓分成的兩部分大

尋找每次切哪乙隻蚯蚓就是在佇列1、佇列2、佇列3的隊頭找乙個算上增加的長度最大的蚯蚓,之後把他出隊,切開的兩部分分別進入隊2、隊3。

最後合併輸出

code:

#include #include 

#include

#include

using

namespace

std;

const

int n = 10000010

;unsigned

long

long

n, m, q, u, v, a[n], ans[n], s, y, tot, t;

queue

q1, q2, q3;

int cmp (long x, long

y) int

maxn ()

if (x2 >= x1 && x2 >= x3)

q3.pop ();

return

x3;}

void putin (long

long x1, long

long

x2)

intmain ()

while (!q1.empty () || !q2.empty () || !q3.empty ()) a[++tot] = maxn() +y;

for (long

long i = t; i <= m; i += t) printf ("

%lld

", ans[i]);

printf ("\n

");for (long

long i = t; i <= tot; i += t) printf ("

%lld

", a[i]);

return0;

}

謝謝收看,祝身體健康!

洛谷P2827 蚯蚓

本題中,我們將用符號 lfloor c rfloor 表示對 c 向下取整,例如 lfloor 3.0 rfloor lfloor 3.1 rfloor lfloor 3.9 rfloor 3 蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裡現...

蚯蚓 P2827 蚯蚓

本題中,我們將用符號 c lfloor c rfloor c 表示對c向下取整,例如 3.0 3.1 3.9 3 lfloor 3.0 rfloor lfloor 3.1 rfloor lfloor 3.9 rfloor 3 3 0 3.1 3 9 3。蛐蛐國最近蚯蚓成災了!隔壁跳蚤國的跳蚤也拿蚯蚓...

洛谷P2827 蚯蚓 佇列 觀察

我們不難發現先被切開的兩半一定比後被切開的兩半大,這樣就天然的生成了佇列的單調性,就可以省去乙個log。所以,我們開三個佇列,分別為or igin big sma ll,每次查詢時將三個佇列的對頭進行比較即可。code include include include include using na...