結果
| 問題 | No.3492 区間冪乗加算一点取得 |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2024-08-11 09:18:31 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,119 ms / 4,000 ms |
| コード長 | 1,198 bytes |
| 記録 | |
| コンパイル時間 | 369 ms |
| コンパイル使用メモリ | 85,028 KB |
| 実行使用メモリ | 98,608 KB |
| 最終ジャッジ日時 | 2026-04-03 20:52:29 |
| 合計ジャッジ時間 | 14,244 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
R=range class BIT: def __init__(self,x): if isinstance(x,int): self.N=x self.F=[0]*(x+1) else: self.N=len(x) self.F=[0]*(self.N+1) for j in R(1,self.N+1): i=j-1 self.F[j]=x[i] k=j-(j&-j) while i>k: self.F[j]+=self.F[i] i-=i&-i def Add(self,i,u): i+=1 while i<=self.N: self.F[i]+=u i+=i&-i def InitialSegmentSum(self,r): assert(r>-2) a=0 i=min(r+1,self.N) while i: a+=self.F[i] i-=i&-i return a class IntervalAddBIT: def __init__(self,N): self.N=N self.F=BIT(N+1) self.G=BIT(N+1) def IntervalAdd(self,l,r,u): self.F.Add(l,-(l-1)*u%B) self.F.Add(r+1,r*u%B) self.G.Add(l,u) self.G.Add(r+1,-u) def InitialSegmentSum(self,r): return self.F.InitialSegmentSum(r)+r*self.G.InitialSegmentSum(r) def IntervalSum(self,l,r): return self.InitialSegmentSum(r)-self.InitialSegmentSum(l-1) J=lambda:map(int,input().split()) N,B,Q=J() c=[] for d in R(101):c+=[[1]+[sum(c[-1][j:j+2])%B for j in R(d)]] A=[IntervalAddBIT(N)for d in R(101)] for _ in R(Q): L,M,U,C,D=J() p=1 for d in R(D,-1,-1):A[d].IntervalAdd(L-1,U-1,c[D][d]*p%B);p=p*C%B a,p=0,1 for d in R(101):a+=A[d].IntervalSum(M-1,M-1)*p;p=p*M%B print(a%B)