description
你有n個線段,每一秒你要拿出來最長的乙個線段切成兩段長度為⌊p∗
u⌋
\lfloor\rfloor
⌊p∗u⌋和u−⌊
p∗u⌋
u-\lfloor\rfloor
u−⌊p∗u
⌋兩段(其中u是線段長,p是乙個大於0小於1的實數)沒被切的線段長度加q。問和第k秒的切割線段切割前的長度和m秒後的n+m條線段的長度。
sample input
3 7 1 1 3 1
3 3 2
sample output
3 4 4 4 5 5 6
6 6 6 5 5 4 4 3 2 2
我們開三個序列維護。
第乙個序列存原數,第二個序列存⌊p∗
u⌋
\lfloor\rfloor
⌊p∗u
⌋,第三個序列存u−⌊
p∗u⌋
u-\lfloor\rfloor
u−⌊p∗u
⌋。每次取三個佇列隊頭最大值即可,易證不說了。
#include
#include
#include
using
namespace std;
typedef
long
long ll;
int_min
(int x,
int y)
int_max
(int x,
int y)
intread()
while
(ch >=
'0'&& ch <=
'9') s = s *
10+ ch -
'0', ch =
getchar()
;return s * f;
}void
put(
int x)
int num =0;
char c[15]
;while
(x) c[
++num]
=(x %10)
+'0'
, x /=10
;while
(num)
putchar
(c[num--])
;}int len, a[
110000];
int q[3]
[7100001
], l[3]
, r[3]
;int
main()
else
if(h2 >= h1 && h2 >= h3)
else
if(i % t ==
0&& i != m / t * t)
putchar
(' ');
}puts(""
);for(
int i =
1; i <= n + m; i++
)else
if(h2 >= h1 && h2 >= h3)
else
if(i % t ==
0&& i !=
(n + m)
/ t * t)
putchar
(' ');
}return0;
}
noip2016 蚯蚓 佇列
傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...
noip2016 蚯蚓 佇列
傳送門 樣例1 3 7 1 1 3 1 3 3 2 樣例2 3 7 1 1 3 2 3 3 2 樣例3 3 7 1 1 3 9 3 3 2 樣例1 3 4 4 4 5 5 6 6 6 6 5 5 4 4 3 2 2 樣例2 4 4 5 6 5 4 3 2 樣例3 空行 很顯然是一道優先佇列的題0 0...
NOIp2016 蚯蚓 佇列
link 這道題是個 zz 題 我們考慮如何得部分分,即十分 zz 的 theta m n log m n 窩萌發現這個複雜度似乎可以接受,但是會爆是真的,所以每當這個時候我們就需要思考問題內部的單調性。我們發現其實對於兩條蚯蚓 a 和 b 設它們的長度為 l a 和 l b 假設他們滿足 l a ...