Submission #48519202
Source Code Expand
#include <bits/stdc++.h>
#include <atcoder/modint>
#include <atcoder/lazysegtree>
namespace {
using ModInt [[maybe_unused]] = atcoder::modint998244353;
using Num [[maybe_unused]] = long long int;
using Vec [[maybe_unused]] = std::vector<Num>;
using Set [[maybe_unused]] = std::set<Num>;
using Mset [[maybe_unused]] = std::multiset<Num>;
using Edges [[maybe_unused]] = std::vector<std::vector<Num>>;
template<typename T>
using Q [[maybe_unused]] = std::queue<T>;
template<typename T>
using PQ [[maybe_unused]] = std::priority_queue<T, std::vector<T>, std::greater<T>>;
}
struct Prob {
ModInt prob_kept {1};
ModInt value {0};
};
struct Node {
Num width {0};
ModInt average {0};
Node merge(const Node& rhs) const {
Num w = width + rhs.width;
if (w == 0) {
Node node;
return node;
}
ModInt lsum = average;
lsum *= width;
ModInt rsum = rhs.average;
rsum *= rhs.width;
ModInt avg = lsum + rsum;
avg /= w;
Node result;
result.width = w;
result.average = avg;
return result;
}
Node update(const Prob& prob) const {
Node result;
result.width = width;
ModInt v = average;
v *= prob.prob_kept;
v += prob.value;
result.average = v;
return result;
}
};
Node func_operate(Node a, Node b) {
return a.merge(b);
}
Node func_unit() {
return Node();
}
Node func_map(Prob p, Node node) {
return node.update(p);
}
Prob func_compose(Prob a, Prob b) {
ModInt v = b.value;
v *= a.prob_kept;
v += a.value;
Prob p;
p.prob_kept = a.prob_kept * b.prob_kept;
p.value = v;
return p;
}
Prob func_id() {
Prob p;
return p;
}
void solve(std::istream& is, std::ostream& os) {
Num n, m;
is >> n >> m;
Vec aset(n);
for(auto&& x : aset) {
is >> x;
}
atcoder::lazy_segtree<Node, func_operate, func_unit, Prob, func_map, func_compose, func_id> tree(n+1);
for(Num i{0}; i<n; ++i) {
Node node;
node.width = 1;
node.average = aset.at(i);
tree.set(i, node);
}
for(Num i{0}; i<m; ++i) {
Num l, r, x;
is >> l >> r >> x;
--l;
ModInt inverse_p = 1;
inverse_p /= (r - l);
Prob prob;
ModInt p_remaining = 1;
p_remaining -= inverse_p;
prob.prob_kept = p_remaining;
ModInt value = x;
value *= inverse_p;
prob.value = value;
tree.apply(l, r, prob);
}
for(Num i{0}; i<n; ++i) {
os << tree.prod(i, i+1).average.val();
if ((i+1) >= n) {
os << "\n";
} else {
os << " ";
}
}
}
int main(void) {
solve(std::cin, std::cout);
return 0;
}
Submission Info
| Submission Time | |
|---|---|
| Task | F - Random Update Query |
| User | zettsut |
| Language | C++ 20 (gcc 12.2) |
| Score | 550 |
| Code Size | 3005 Byte |
| Status | AC |
| Exec Time | 1684 ms |
| Memory | 18192 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 550 / 550 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | example0.txt, example1.txt, example2.txt |
| All | 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, example0.txt, example1.txt, example2.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 000.txt | AC | 134 ms | 3304 KiB |
| 001.txt | AC | 1619 ms | 18176 KiB |
| 002.txt | AC | 1603 ms | 18164 KiB |
| 003.txt | AC | 1606 ms | 18028 KiB |
| 004.txt | AC | 1644 ms | 18120 KiB |
| 005.txt | AC | 1643 ms | 18040 KiB |
| 006.txt | AC | 1649 ms | 18176 KiB |
| 007.txt | AC | 1070 ms | 18076 KiB |
| 008.txt | AC | 1068 ms | 18188 KiB |
| 009.txt | AC | 1068 ms | 18100 KiB |
| 010.txt | AC | 1641 ms | 18032 KiB |
| 011.txt | AC | 1640 ms | 18096 KiB |
| 012.txt | AC | 1640 ms | 18120 KiB |
| 013.txt | AC | 1606 ms | 18084 KiB |
| 014.txt | AC | 1676 ms | 18164 KiB |
| 015.txt | AC | 1216 ms | 10992 KiB |
| 016.txt | AC | 445 ms | 3988 KiB |
| 017.txt | AC | 706 ms | 17128 KiB |
| 018.txt | AC | 957 ms | 17776 KiB |
| 019.txt | AC | 822 ms | 6572 KiB |
| 020.txt | AC | 772 ms | 10648 KiB |
| 021.txt | AC | 461 ms | 4864 KiB |
| 022.txt | AC | 498 ms | 10468 KiB |
| 023.txt | AC | 758 ms | 10268 KiB |
| 024.txt | AC | 499 ms | 6412 KiB |
| 025.txt | AC | 1669 ms | 18168 KiB |
| 026.txt | AC | 1672 ms | 18020 KiB |
| 027.txt | AC | 1668 ms | 18036 KiB |
| 028.txt | AC | 1669 ms | 18036 KiB |
| 029.txt | AC | 1670 ms | 18120 KiB |
| 030.txt | AC | 1672 ms | 18188 KiB |
| 031.txt | AC | 1670 ms | 18040 KiB |
| 032.txt | AC | 1676 ms | 18100 KiB |
| 033.txt | AC | 1684 ms | 18080 KiB |
| 034.txt | AC | 1683 ms | 18192 KiB |
| 035.txt | AC | 1649 ms | 18024 KiB |
| example0.txt | AC | 1 ms | 3512 KiB |
| example1.txt | AC | 1 ms | 3508 KiB |
| example2.txt | AC | 1 ms | 3516 KiB |