結果
| 問題 | No.3530 「」 |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-02-28 10:30:57 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,766 bytes |
| 記録 | |
| コンパイル時間 | 217 ms |
| コンパイル使用メモリ | 85,068 KB |
| 実行使用メモリ | 67,964 KB |
| 最終ジャッジ日時 | 2026-05-04 20:51:46 |
| 合計ジャッジ時間 | 3,941 ms |
|
ジャッジサーバーID (参考情報) |
judge2_1 / judge1_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 2 |
| other | RE * 27 |
ソースコード
# うまく翻訳できなかったのでhttps://yukicoder.me/submissions/1149633 を愚直に人力翻訳
# ACLpyのModintの使い方分からなかった(´;ω;`)
from atcoder.lazysegtree import LazySegTree
import bisect
from sys import stdin
input = stdin.readline
MOD = 998244353
def rev(x):
return pow(x, MOD - 2, MOD)
def op(a, b) :
return ((a[0] * (1 - a[1]) + b[0] * (1 - b[1])) % MOD, 0)
e = (1, 1)
def mapping(f, x) :
return ((x[0] * f) % MOD, x[1])
def composition(f, g) :
return f * g % MOD
_id = 1
f34 = 3 * rev(4) % MOD
f43 = rev(f34)
N = int(input().rstrip())
X = [0 for i in range(N)]
Y = [0 for i in range(N)]
for i in range(N): X[i], Y[i] = map(int, input().rstrip().split())
zX = sorted(set(X))
zY = sorted(set(Y))
if len(zX) == 1 or len(zY) == 1:
print(0)
exit()
rX = [bisect.bisect_left(zX, x) for x in X]
rY = [bisect.bisect_left(zY, y) for y in Y]
ans = 0
for _ in range(2):
G = [[] for i in range(len(zX))]
for i in range(N): G[rX[i]].append(rY[i])
V = [e for i in range(len(zY))]
for i in range(N):
if rY[i] + 1 < len(zY):
V[rY[i] + 1] = (V[rY[i] + 1][0] * f34 % MOD, 1)
for i in range(1, len(zY)): V[i] = (V[i-1][0] * V[i][0] % MOD, 1)
seg = LazySegTree(op, e, mapping, composition, _id, V)
fs = 1
for i in range(len(zX) - 1):
for y in G[i]:
seg.set(y, (seg.get(y)[0], seg.get(y)[1] * f34 % MOD))
seg.apply(0, y, f34)
seg.apply(y+1, len(zY), f43)
fs = fs * f34 % MOD
all_prd = seg.all_prod()
ans += (1 - all_prd[0] - fs) * (zX[i + 1] - zX[i]) % MOD
ans %= MOD
rX, rY = rY, rX
zX, zY = zY, zX
for i in range(N):
ans = ans * 4 % MOD
ans = ans * 2 % MOD
print(ans)