結果

問題 No.2950 Max Min Product
ユーザー hitonanodehitonanode
提出日時 2024-10-26 22:22:10
言語 C++23
(gcc 12.3.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,789 bytes
コンパイル時間 1,530 ms
コンパイル使用メモリ 123,656 KB
実行使用メモリ 17,300 KB
最終ジャッジ日時 2024-10-26 22:22:22
合計ジャッジ時間 11,323 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 2 ms
6,816 KB
testcase_01 AC 2 ms
6,816 KB
testcase_02 AC 2 ms
6,820 KB
testcase_03 AC 148 ms
16,684 KB
testcase_04 AC 162 ms
16,920 KB
testcase_05 AC 153 ms
16,720 KB
testcase_06 AC 216 ms
17,168 KB
testcase_07 AC 213 ms
17,264 KB
testcase_08 AC 211 ms
17,172 KB
testcase_09 AC 104 ms
10,260 KB
testcase_10 AC 185 ms
16,972 KB
testcase_11 WA -
testcase_12 AC 210 ms
17,172 KB
testcase_13 AC 212 ms
17,176 KB
testcase_14 WA -
testcase_15 AC 211 ms
17,076 KB
testcase_16 AC 158 ms
16,540 KB
testcase_17 AC 171 ms
16,644 KB
testcase_18 AC 224 ms
17,296 KB
testcase_19 AC 222 ms
17,296 KB
testcase_20 AC 222 ms
17,244 KB
testcase_21 AC 132 ms
10,396 KB
testcase_22 WA -
testcase_23 AC 117 ms
10,416 KB
testcase_24 AC 229 ms
17,300 KB
testcase_25 AC 233 ms
17,300 KB
testcase_26 AC 230 ms
17,300 KB
testcase_27 AC 186 ms
15,244 KB
testcase_28 AC 270 ms
16,964 KB
testcase_29 AC 197 ms
15,936 KB
testcase_30 AC 276 ms
15,568 KB
testcase_31 AC 263 ms
16,788 KB
testcase_32 AC 283 ms
15,840 KB
testcase_33 AC 188 ms
14,592 KB
testcase_34 AC 124 ms
9,088 KB
testcase_35 AC 182 ms
14,628 KB
testcase_36 AC 254 ms
15,004 KB
testcase_37 AC 252 ms
14,904 KB
testcase_38 AC 252 ms
15,064 KB
testcase_39 AC 2 ms
6,820 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <utility>
#include <vector>
using namespace std;

#include <atcoder/lazysegtree>
// range set range sum
constexpr int md = 998244353;

using S = pair<int, int>;  // (sum, size)
using F = int;
S op(S a, S b) { return {(a.first + b.first) % md, a.second + b.second}; }
S e() { return {0, 0}; }
S mapping(F f, S x) { return f == 0 ? x : S(x.second * (long long)f % md, x.second); }
F composition(F f, F g) { return f == 0 ? g : f; }
F id() { return 0; }
using LST = atcoder::lazy_segtree<S, op, e, F, mapping, composition, id>;


int main() {
    cin.tie(nullptr), ios::sync_with_stdio(false);

    vector<pair<int, int>> maxi, mini;
    maxi.emplace_back(1 << 30, -1);
    mini.emplace_back(0, -1);

    long long ret = 0;

    int N;
    cin >> N;

    vector<S> init(N, {0, 1});
    LST mintree(init), maxtree(init);

    long long ans = 0;
    for (int i = 0; i < N; ++i) {
        int a;
        cin >> a;

        ret += (long long)a * a % md;

        {
            int r = i;
            while (maxi.back().first <= a) {
                int l = maxi.back().second;
                ret += (long long)(a - maxi.back().first) * mintree.prod(l, r).first % md;
                r = l;
                maxi.pop_back();
            }
            maxi.emplace_back(a, r);
            maxtree.apply(r, i + 1, a);
        }

        {
            int r = i;
            while (mini.back().first >= a) {
                const int l = mini.back().second;
                ret += (long long)(a - mini.back().first) * maxtree.prod(l, r).first % md;
                r = l;
                mini.pop_back();
            }
            mini.emplace_back(a, r);
            mintree.apply(r, i + 1, a);
        }

        ans += ret % md;
    }

    cout << ans % md << '\n';
}
0