結果

問題 No.1496 不思議な数え上げ
ユーザー 37kt
提出日時 2024-11-26 11:36:59
言語 Rust
(1.83.0 + proconio)
結果
WA  
実行時間 -
コード長 1,310 bytes
コンパイル時間 17,001 ms
コンパイル使用メモリ 378,520 KB
実行使用メモリ 15,872 KB
最終ジャッジ日時 2024-11-26 11:37:35
合計ジャッジ時間 31,147 ms
ジャッジサーバーID
(参考情報)
judge1 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 25 WA * 14
権限があれば一括ダウンロードができます

ソースコード

diff #

use std::collections::BTreeSet;

#[allow(unused_imports)]
use proconio::{
    input,
    marker::{Bytes, Chars, Usize1},
};

fn main() {
    input! {
        n: usize,
        mut p: [usize; n],
        a: [usize; n],
    }
    p.insert(0, 0);
    p.push(0);
    let mut q = vec![0; n + 1];
    for i in 1..=n {
        q[p[i]] = i;
    }
    let mut csum = vec![0; p.len() + 1];
    for i in 0..p.len() {
        csum[i + 1] = csum[i] + p[i];
    }
    let mut st = BTreeSet::from([0, n + 1]);
    for i in 1..=n {
        let m = q[i];
        let mut s = a[i - 1];
        let l = *st.range(..m).next_back().unwrap();
        let r = *st.range(m..).next().unwrap();
        st.insert(m);
        let mut res = 0;
        if m - l <= r - m {
            for &x in p[l + 1..=m].iter().rev() {
                if s < x {
                    break;
                }
                s -= x;
                res += csum[m + 1..=r].partition_point(|&c| c - csum[m + 1] <= s);
            }
        } else {
            for &x in &p[m..r] {
                if s < x {
                    break;
                }
                s -= x;
                let t = (m - l) - csum[l + 1..=m].partition_point(|&c| csum[m] - c >= s);
                res += t;
            }
        }
        println!("{}", res);
    }
}
0