生活随笔
收集整理的這篇文章主要介紹了
蚯蚓之队列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
那么只要原來的蚯蚓具有單調性,每次只需要找這三個隊列的最大值即可
至于每次都要增加的長度,我們可以先不加上,等到取出來的時候在加 (i - 1) * q(i?1)?q, 放回去的時候注意要減去 i * qi?q
#include<bits/stdc++.h>
typedef long long ll
;
using namespace std
;const int N
= 2e5 + 5;
const int mod
= 1e9 + 7;queue
<ll
> q
[3];
ll a
[N
];
int main() {ios
::sync_with_stdio(false), cin
.tie(nullptr), cout
.tie(nullptr);ll n
, m
, u
, v
, qq
, t
; cin
>> n
>> m
>> qq
>> u
>> v
>> t
;for (int i
= 1; i
<= n
; i
++) cin
>> a
[i
];sort(a
+ 1, a
+ 1 + n
);for (int i
= n
; i
>= 1; i
--) q
[0].push(a
[i
]);for (int i
= 1; i
<= m
; i
++) {ll maxz
= -1e18, pos
= -1;for (int j
= 0; j
< 3; j
++) {if (q
[j
].size() && q
[j
].front() > maxz
) {maxz
= q
[j
].front();pos
= j
;}}q
[pos
].pop();maxz
+= (i
- 1) * qq
;ll x
= maxz
* u
/ v
, y
= maxz
- x
;if ((i
% t
== 0)) cout
<< maxz
<< ' ';q
[1].push(x
- i
* qq
), q
[2].push(y
- i
* qq
);}cout
<< "\n";int cnt
= 1;while (q
[0].size() || q
[1].size() || q
[2].size()) {ll p
= -1e18, pos
= -1;for (int j
= 0; j
< 3; j
++) {if (q
[j
].size() && q
[j
].front() > p
) {pos
= j
;p
= q
[j
].front();}}q
[pos
].pop();if (cnt
% t
== 0) {cout
<< p
+ m
* qq
<< ' ';}cnt
++;}cout
<< "\n";return 0;
}
總結
以上是生活随笔為你收集整理的蚯蚓之队列的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。