提出 #63592798


ソースコード 拡げる

/*https://atcoder.jp/contests/practice2/tasks/practice2_k*/
/*2025年03月09日 18時15分34秒*/
#include <atcoder/all>
#include <atcoder/lazysegtree.hpp>
using namespace atcoder;
using mint = modint998244353;
// using mint = modint1000000007;
#include <bits/stdc++.h>
#define all(v) (v).begin(), (v).end()
#define rall(v) (v).rbegin(), (v).rend()
#define rep(i, n) for (long long int i = 0; i < (n); ++i)
#define rep2(i, k, n) for (long long int i = (k); i < (n); ++i)
using namespace std;
using ll = long long;
using vint = vector<int>;
using vll = vector<ll>;
using vvint = vector<vector<int>>;
using vvll = vector<vector<ll>>;

// const ll INF = (ll)2e18+9;
const int INF = (int)2e9 + 7;

template <typename T>
void chmin(T& a, T b) {
    a = min(a, b);
}
template <typename T>
void chmax(T& a, T b) {
    a = max(a, b);
}

template <typename T>
void print(vector<T> v) {
    int n = v.size();
    rep(i, n) {
        if (i == 0)
            cout << v[i];
        else
            cout << ' ' << v[i];
    }
    cout << endl;
}

void yesno(bool x) {
    puts(x ? "Yes" : "No");
}

void solve();

int main() {
    solve();
    return 0;
}

struct S {
    mint val;
    int size;
};

S op(S a, S b) {
    return {a.val + b.val, a.size + b.size};
}

S e() {
    return {0, 1};
}

struct F {
    mint b, c;
};

S mapping(F f, S x) {
    return {
        f.b * x.val + f.c * x.size,
        x.size,
    };
}

F composition(F f, F g) {
    return {
        f.b * g.b,
        f.b * g.c + f.c,
    };
}

F id() {
    return {1, 0};
}

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    int n, q;
    cin >> n >> q;

    lazy_segtree<S, op, e, F, mapping, composition, id> seg(n);

    rep(i, n) {
        ll a;
        cin >> a;
        seg.set(i, {a, 1});
    }

    rep(i, q) {
        int t;
        cin >> t;
        if (t == 0) {
            int l, r;
            ll b, c;
            cin >> l >> r >> b >> c;
            seg.apply(l, r, {b, c});
        } else {
            int l, r;
            cin >> l >> r;
            cout << seg.prod(l, r).val.val() << endl;
        }
    }
}

提出情報

提出日時
問題 K - Range Affine Range Sum
ユーザ goropikari
言語 C++ 23 (gcc 12.2)
得点 100
コード長 2117 Byte
結果 AC
実行時間 960 ms
メモリ 19200 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 100 / 100
結果
AC × 1
AC × 19
セット名 テストケース
Sample example_00
All example_00, max_random_00, max_random_01, max_random_02, random_00, random_01, random_02, small_00, small_01, small_02, small_03, small_04, small_05, small_06, small_07, small_08, small_09, small_random_00, small_random_01
ケース名 結果 実行時間 メモリ
example_00 AC 1 ms 3564 KiB
max_random_00 AC 960 ms 19200 KiB
max_random_01 AC 955 ms 19196 KiB
max_random_02 AC 958 ms 19128 KiB
random_00 AC 767 ms 18348 KiB
random_01 AC 808 ms 18896 KiB
random_02 AC 498 ms 4872 KiB
small_00 AC 2 ms 3472 KiB
small_01 AC 2 ms 3452 KiB
small_02 AC 1 ms 3452 KiB
small_03 AC 2 ms 3504 KiB
small_04 AC 2 ms 3580 KiB
small_05 AC 2 ms 3444 KiB
small_06 AC 2 ms 3404 KiB
small_07 AC 2 ms 3344 KiB
small_08 AC 2 ms 3452 KiB
small_09 AC 2 ms 3348 KiB
small_random_00 AC 3 ms 3468 KiB
small_random_01 AC 2 ms 3452 KiB