Submission #61624943


Source Code Expand

use ac_library::{Max, Segtree};
#[allow(unused_imports)]
use proconio::{input, marker::Usize1};

fn main() {
    input!{
        n: usize,
        mut a: [u64; n],
        q: usize,
    }
    a.push(INF);
    let mut seg :Segtree<Max<usize>> = Segtree::new(n);
    for (i, ai) in a[0..n].iter().enumerate() {
        seg.set(i, a.lower_bound(*ai * 2) - i);
    }

    let check = |l: usize, r: usize, k: usize| -> bool {
        let val = seg.prod(l..l+k);
        l+k-1+val.max(k)<=r
    };

    for _ in 0..q {
        input! {
            l: Usize1,
            r: Usize1
        }

        // 無駄にlogがつくが、シンプルな二分探索をする
        let mut ok = 0;
        let mut ng = n-l;

        while ng-ok>1 {
            let mid = (ok+ng)/2;
            if check(l, r, mid) {
                ok = mid;
            } else {
                ng = mid;
            }
        }
        println!("{}", ok);
    }
}

pub trait Debuggable {
    fn debug_string(&self) -> String;
}

impl<T: std::fmt::Debug + std::fmt::Display> Debuggable for Vec<T> {
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        use std::iter::repeat;
        if let Some(max_size) = self.iter()
            .enumerate()
            .map(|(i, x)| (format!("{:?}", x).len()).max(format!("{:?}", i).len()))
            .max() {
                let mut idx = String::from("idx |");   
                let mut val = String::from("val |");   
                for (i, xi) in self.iter().enumerate() {
                    idx.push_str(
                        &format!(" {:>w$} |", i, w=max_size)
                    );
                    val.push_str(
                        &format!(" {:>w$} |", xi, w=max_size)
                    );
                }

                format!("{}\n{}\n{}\n", idx, repeat('-').take(idx.len()).join(""), val)
            } else {
                format!("idx | \nval |\n")
            }
    }
}

impl<T: std::fmt::Debug + std::fmt::Display> Debuggable for std::collections::BTreeSet<T> {
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        format!("{{ {} }}", self.iter().join(", "))
    }
}

impl<T, U> Debuggable for std::collections::BTreeMap<T, U> 
where T: std::fmt::Debug + std::fmt::Display, U: std::fmt::Debug + std::fmt::Display
{
    fn debug_string(&self) -> String {
        use itertools::Itertools;
        format!(
            "{{\n{}\n }}", self.iter()
                .map(|(k, v)| format!("{k} -> {v}, "))
                .join("\n")
        )
    }
}

// lg! マクロの定義
#[macro_export]
macro_rules! lg {
    ($val:expr) => {
        #[cfg(feature = "local")]
        {
            {
                use Debuggable;
                let val = &$val;
                eprintln!(
                    "[{}:{}] {} = \n{}",
                    file!(),
                    line!(),
                    stringify!($val),
                    val.debug_string()
                );
                val
            }
        }
    }
}
    pub static INF: u64 = 1e18 as u64;
pub static DI: &[usize] = &[0, !0, 0, 1, !0, 1, !0, 1];
pub static DJ: &[usize] = &[!0, 0, 1, 0, !0, !0, 1, 1];
pub static DC: &[char] = &['L', 'U', 'R', 'D'];
pub trait VecLibs<T: std::cmp::Ord> {
    fn lower_bound(&self, elm: T) -> usize;
    fn upper_bound(&self, elm: T) -> usize;
}

impl<T: std::cmp::Ord> VecLibs<T> for Vec<T> {
    fn lower_bound(&self, elm: T) -> usize {
        let mut left = 0;
        let mut right = self.len();
        while left < right {
            let mid = (left + right) / 2;
            if self[mid] < elm {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        left
    }

    fn upper_bound(&self, elm: T) -> usize {
        let mut left = 0;
        let mut right = self.len();
        while left < right {
            let mid = (left + right) / 2;
            if self[mid] <= elm {
                left = mid + 1;
            } else {
                right = mid;
            }
        }
        left
    }
}

Submission Info

Submission Time
Task G - Simultaneous Kagamimochi 2
User ardRiriy
Language Rust (rustc 1.70.0)
Score 575
Code Size 4081 Byte
Status AC
Exec Time 485 ms
Memory 11660 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 575 / 575
Status
AC × 2
AC × 46
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_random_02.txt, 01_random_03.txt, 01_random_04.txt, 01_random_05.txt, 01_random_06.txt, 01_random_07.txt, 01_random_08.txt, 01_random_09.txt, 01_random_10.txt, 01_random_11.txt, 01_random_12.txt, 01_random_13.txt, 01_random_14.txt, 01_random_15.txt, 01_random_16.txt, 01_random_17.txt, 01_random_18.txt, 01_random_19.txt, 01_random_20.txt, 01_random_21.txt, 01_random_22.txt, 01_random_23.txt, 01_random_24.txt, 01_random_25.txt, 01_random_26.txt, 01_random_27.txt, 01_random_28.txt, 01_random_29.txt, 01_random_30.txt, 01_random_31.txt, 01_random_32.txt, 01_random_33.txt, 01_random_34.txt, 01_random_35.txt, 01_random_36.txt, 01_random_37.txt, 01_random_38.txt, 01_random_39.txt, 02_handmade_40.txt, 02_handmade_41.txt, 02_handmade_42.txt, 02_handmade_43.txt, 02_handmade_44.txt, 02_handmade_45.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 0 ms 1876 KiB
00_sample_01.txt AC 0 ms 2088 KiB
01_random_02.txt AC 463 ms 11628 KiB
01_random_03.txt AC 463 ms 11592 KiB
01_random_04.txt AC 462 ms 11628 KiB
01_random_05.txt AC 465 ms 11584 KiB
01_random_06.txt AC 465 ms 11532 KiB
01_random_07.txt AC 376 ms 9804 KiB
01_random_08.txt AC 290 ms 4196 KiB
01_random_09.txt AC 418 ms 11336 KiB
01_random_10.txt AC 461 ms 11592 KiB
01_random_11.txt AC 429 ms 11652 KiB
01_random_12.txt AC 459 ms 11628 KiB
01_random_13.txt AC 465 ms 11492 KiB
01_random_14.txt AC 430 ms 11612 KiB
01_random_15.txt AC 459 ms 11656 KiB
01_random_16.txt AC 402 ms 11552 KiB
01_random_17.txt AC 485 ms 11468 KiB
01_random_18.txt AC 483 ms 11556 KiB
01_random_19.txt AC 482 ms 11564 KiB
01_random_20.txt AC 482 ms 11608 KiB
01_random_21.txt AC 481 ms 11656 KiB
01_random_22.txt AC 432 ms 11544 KiB
01_random_23.txt AC 434 ms 11564 KiB
01_random_24.txt AC 433 ms 11660 KiB
01_random_25.txt AC 433 ms 11632 KiB
01_random_26.txt AC 432 ms 11616 KiB
01_random_27.txt AC 471 ms 11456 KiB
01_random_28.txt AC 470 ms 11312 KiB
01_random_29.txt AC 471 ms 11484 KiB
01_random_30.txt AC 471 ms 11480 KiB
01_random_31.txt AC 471 ms 11312 KiB
01_random_32.txt AC 376 ms 7348 KiB
01_random_33.txt AC 319 ms 4852 KiB
01_random_34.txt AC 278 ms 4124 KiB
01_random_35.txt AC 473 ms 11196 KiB
01_random_36.txt AC 474 ms 11132 KiB
01_random_37.txt AC 471 ms 11064 KiB
01_random_38.txt AC 472 ms 11080 KiB
01_random_39.txt AC 473 ms 11268 KiB
02_handmade_40.txt AC 180 ms 2916 KiB
02_handmade_41.txt AC 179 ms 2816 KiB
02_handmade_42.txt AC 187 ms 3096 KiB
02_handmade_43.txt AC 462 ms 10860 KiB
02_handmade_44.txt AC 393 ms 11612 KiB
02_handmade_45.txt AC 392 ms 10076 KiB