結果
| 問題 |
No.3298 K-th Slime
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-10-05 14:04:59 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 182 ms / 2,000 ms |
| コード長 | 1,321 bytes |
| コンパイル時間 | 12,026 ms |
| コンパイル使用メモリ | 399,772 KB |
| 実行使用メモリ | 7,716 KB |
| 最終ジャッジ日時 | 2025-10-05 14:05:15 |
| 合計ジャッジ時間 | 14,497 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 25 |
ソースコード
use std::{cmp::Reverse, collections::BinaryHeap};
use proconio::input;
fn solve() -> Vec<u64> {
input! {
n: usize,
k: usize,
q: usize,
a: [u64; n],
}
let mut queue = KthLargest::new(k);
for &ai in a.iter() {
queue.push(ai);
}
let mut ans = Vec::new();
for _ in 0..q {
input! {
t: u8,
}
match t {
1 => {
input! {
x: u64,
}
queue.push(x);
},
2 => {
input! {
y: u64,
}
let s = queue.pop_kth();
queue.push(s + y);
},
3 => {
ans.push(queue.kth());
},
_ => unreachable!(),
}
}
ans
}
fn main() {
let ans = solve();
eprintln!("{:?}", ans);
for x in ans {
println!("{}", x);
}
}
struct KthLargest {
k: usize,
heap0: BinaryHeap<u64>,
heap1: BinaryHeap<Reverse<u64>>,
}
impl KthLargest {
fn new(k: usize) -> Self {
Self {
k,
heap0: BinaryHeap::new(),
heap1: BinaryHeap::new(),
}
}
fn push(&mut self, x: u64) {
self.heap0.push(x);
if self.heap0.len() >= self.k {
let v = self.heap0.pop().unwrap();
self.heap1.push(Reverse(v));
}
}
fn pop_kth(&mut self) -> u64 {
self.heap1.pop().unwrap().0
}
fn kth(&self) -> u64 {
self.heap1.peek().unwrap().0
}
}