結果

問題 No.801 エレベーター
コンテスト
ユーザー 👑 tttmmmyyyy
提出日時 2026-11-03 15:17:27
言語 Fix
(1.6.0 + cp-library + minilib)
コンパイル:
fix_c _filename_
実行:
./a.out
結果
TLE  
実行時間 -
コード長 1,247 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 11,354 ms
コンパイル使用メモリ 669,932 KB
実行使用メモリ 9,924 KB
最終ジャッジ日時 2026-11-03 15:18:47
合計ジャッジ時間 78,720 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 11 TLE * 16
権限があれば一括ダウンロードができます
コンパイルメッセージ
make: 'lib.o' は更新済みです.

ソースコード

diff #
raw source code

module Main;

import BinaryHeap;
import BoolArray;
import CPLib.Arithmetic;
import CPLib.DSegtree;
import CPLib.Graph;
import CPLib.IO;
import CPLib.LSegtree;
import CPLib.UnionFind;
import CPLib.ZP;
import CPLib.Monoid;
import HashMap;
import HashSet;

type Z = ZP P1000000007;

// type Tree = 
type Tree = LSegtree (WeightedSum Z) (RangeAdd WeightedSum Z);

main : IO () = (
    let cN = *read_i; // 回数
    let cM = *read_i; // エレベータの数
    let cK = *read_i; // 移動回数
    let cLRs = *range(0, cM).fold_m([], |_, cLRs|
        let l = *read_i;
        let r = *read_i;
        let l = l - 1;
        cLRs.push_back((l, r)).pure
    );
    let t = LSegtree::create(cN) : Tree;
    let t = t.set(0, WeightedSum::make_single(zp(1)));
    let s = LSegtree::build(fill(cN, make_single(zp(0)))) : Tree;    
    let (t, _) = range(0, cK).fold((t, s), |k, (t, s)|
        let s = range(0, cN).fold(s, |n, s| s.set(n, make_single(zp(0))));
        let s = range(0, cM).fold(s, |m, s|
            let (l, r) = cLRs.@(m);
            let sum = t.fold(l, r);
            let s = s.act_range(l, r, RangeAdd { a : sum.@v });
            s
        );
        (s, t)
    );
    let ans = t.@(cN-1);
    ans.@v.@value.to_string.println
);
0