結果
| 問題 | No.3530 「」 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-03-26 13:49:33 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 399 ms / 3,000 ms |
| コード長 | 1,609 bytes |
| 記録 | |
| コンパイル時間 | 4,195 ms |
| コンパイル使用メモリ | 355,404 KB |
| 実行使用メモリ | 9,984 KB |
| 最終ジャッジ日時 | 2026-05-04 20:53:05 |
| 合計ジャッジ時間 | 18,540 ms |
|
ジャッジサーバーID (参考情報) |
judge3_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 27 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
using ll = long long;//int型は使わない
#define rep(i,a,b) for(ll i=(ll)a; i<(ll)b; i++)
#define rrep(i,a,b) for(ll i=(ll)b-1; i>=(ll)a; i--)
#define all(vec1) (vec1).begin(), (vec1).end()
#include<atcoder/lazysegtree>
#include<atcoder/modint>
using namespace atcoder;
using mint = modint998244353;
mint op(mint a, mint b) { return a + b; }
mint e() { return 0; }
mint mapping (mint f, mint x) { return f * x; }
mint composition(mint f, mint g) { return f * g; }
mint id() { return 1; }
int main()
{
mint f34 = mint(3) / mint(4);
mint f43 = 1 / f34;
int N; cin >> N;
vector<ll> X(N), Y(N);
rep(i,0,N) cin >> X[i] >> Y[i];
mint ans = 0;
rep(_,0,2) {
//Xの値でソート
vector<pair<ll,ll>> P(N); rep(i,0,N) P[i] = {X[i], Y[i]};
sort(all(P));
rep(i,0,N) X[i] = P[i].first, Y[i] = P[i].second;
//id
vector<ll> Id(N); rep(i,0,N) Id[i] = i;
sort(all(Id), [&](ll i, ll j) -> bool { return Y[i] != Y[j] ? Y[i] < Y[j] : i < j; });
vector<ll> rId(N); rep(i,0,N) rId[Id[i]] = i;
vector<mint> V(N, 1);
V[0] = mint(1) / 4;
rep(i,1,N) V[i] = V[i-1] * f34;
lazy_segtree<mint, op, e, mint, mapping, composition, id> seg(V);
mint fs = f34.pow(N);
rep(i,0,N-1) {
fs *= f43;
seg.set(rId[i], mint(0));
seg.apply(0, rId[i], f34);
seg.apply(rId[i] + 1, N, f43);
ans += (mint(1) - seg.all_prod() - fs) * (X[i+1] - X[i]);
}
swap(X,Y);
}
rep(i,0,N) ans *= 4;
cout << (ans * 2).val() << endl;
return 0;
}