題目
演算法標籤裡的演算法什麼的都不會啊
什麼二叉堆??
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...