結果
問題 | No.2230 Good Omen of White Lotus |
ユーザー |
|
提出日時 | 2023-02-25 18:33:25 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 967 ms / 2,000 ms |
コード長 | 1,625 bytes |
コンパイル時間 | 465 ms |
コンパイル使用メモリ | 82,704 KB |
実行使用メモリ | 93,256 KB |
最終ジャッジ日時 | 2024-09-13 14:20:53 |
合計ジャッジ時間 | 16,264 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 44 |
ソースコード
H,W,N,P = map(int,input().split())class SegTree:#単位元と結合演算はここ変える#いろんな種類のsegは作れないかも#→changeで変えれるunit = 0def f(self,x,y):return max(x,y)#頂点は1-index、一番下の段は0-index(bitは1-index)def __init__(self,N):self.N = Nself.X = [self.unit] * (N + N)def build(self,seq):for i,x in enumerate(seq,self.N):self.X[i] = xfor i in range(self.N-1,0,-1):self.X[i] = self.f(self.X[i << 1],self.X[i << 1 | 1])def set(self,i,x):i += self.Nself.X[i] = xwhile i > 1:i >>= 1self.X[i] = self.f(self.X[i << 1],self.X[i << 1 | 1])def fold(self,L,R):#区間[L,R)についてfold#0 <= L,R <= N にしなきゃダメL += self.NR += self.NvL = self.unitvR = self.unitwhile L < R:if L & 1:vL = self.f(vL,self.X[L])L += 1if R & 1:R -= 1vR = self.f(self.X[R],vR)L >>= 1R >>= 1return self.f(vL,vR)def change(self,f,unit):self.f = fself.unit = unitseg = SegTree(W)l = []for _ in range(N):x,y = map(int,input().split())l.append((x-1,y-1))l.sort()for x,y in l:t = seg.fold(0,y + 1)seg.set(y,t + 1)u = seg.fold(0,W)v = H + W - 3 - umod = 998244353r = pow(P,mod - 2,mod)tmp = pow((1-r)%mod,v,mod) * pow((1-r*2)%mod,u,mod)print((1-tmp)%mod)#print(u,v)