結果
問題 |
No.3116 More and more teleporter
|
ユーザー |
|
提出日時 | 2025-04-19 10:43:28 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,312 bytes |
コンパイル時間 | 15,402 ms |
コンパイル使用メモリ | 396,816 KB |
実行使用メモリ | 7,848 KB |
最終ジャッジ日時 | 2025-04-19 10:43:48 |
合計ジャッジ時間 | 16,306 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 8 WA * 14 |
ソースコード
use std::collections::BTreeMap; use proconio::input; fn main() { input!(n: i64, q: usize); // ranges[&l] = (r, a, b) let mut ranges = BTreeMap::new(); ranges.insert(1, (n + 1, 1, 0)); for _ in 0 .. q { // eprintln!("*ranges = {:?}", ranges); input!(t: usize); if t == 1 { input!(x: i64); let (_l, &(_r, a, b)) = ranges.range(..= x).next_back().unwrap(); // eprintln!("query1({x}): [{_l},{_r})-{a}-{b} ==> {}", (x - a).abs() + b); println!("{}", (x - a).abs() + b); } else { input!(a: i64, b: i64); { let (&_l1, &(_r1, a1, b1)) = ranges.range(..= a).next_back().unwrap(); let cost_current = (a - a1).abs() + b1; if cost_current <= b { // eprintln!("query2({a}, {b}): skipped because of [{_l1},{_r1})-{a1}-{b1}"); continue; } } // eprintln!("query2({a}, {b}):"); let mut l = 1; let mut r = n + 1; // set left bound while let Some((&l1, &(_r1, a1, b1))) = ranges.range(..= a).next_back() { if (a1 - a).abs() + b <= b1 { ranges.remove(&l1); // eprintln!(" L: removed [{l1},{_r1})-{a1}-{b1}"); continue; } l = (a + a1 + b - b1) / 2; ranges.insert(l1, (l, a1, b1)); // eprintln!(" L: updated [{l1},{_r1})-{a1}-{b1} ==> [{l1},{l})"); break; } // set right bound while let Some((&l1, &(r1, a1, b1))) = ranges.range(a ..).next() { if (a1 - a).abs() + b <= b1 { ranges.remove(&l1); // eprintln!(" R: removed [{l1},{r1})-{a1}-{b1}"); continue; } r = (a + a1 - b + b1) / 2; ranges.remove(&l1); ranges.insert(r, (r1, a1, b1)); // eprintln!(" R: updated [{l1},{r1})-{a1}-{b1} ==> [{r},{r1})"); break; } ranges.insert(l, (r, a, b)); // eprintln!(" inserted [{l},{r})-{a}-{b}"); } } }