Module c

Expand description

ยงABC 413 C - Large Queue

refs: https://atcoder.jp/contests/abc413/tasks/abc413_c

use std::collections::VecDeque;

use proconio::input;

fn main() {
    input! { q: usize }

    let mut queue = VecDeque::new();

    for _ in 0..q {
        input! { t: usize }
        match t {
            1 => {
                input! { c: usize, x: usize }
                queue.push_back((c, x));
            }
            2 => {
                input! { k: usize }
                let mut pc = 0;
                let mut sm = 0;

                while pc < k {
                    if let Some((c, x)) = queue.pop_front() {
                        if c <= k - pc {
                            sm += c * x;
                            pc += c;
                        } else {
                            let pop = k - pc;
                            queue.push_front((c - pop, x));
                            sm += pop * x;
                            pc += pop;
                        }
                    }
                }

                println!("{}", sm);
            }
            _ => unreachable!(),
        }
    }
}