結果
問題 | No.1099 Range Square Sum |
ユーザー |
![]() |
提出日時 | 2020-07-17 20:59:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 895 ms / 2,000 ms |
コード長 | 1,508 bytes |
コンパイル時間 | 367 ms |
コンパイル使用メモリ | 82,412 KB |
実行使用メモリ | 117,936 KB |
最終ジャッジ日時 | 2024-11-29 19:14:53 |
合計ジャッジ時間 | 11,237 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 |
other | AC * 30 |
ソースコード
import syssys.setrecursionlimit(10 ** 6)int1 = lambda x: int(x) - 1p2D = lambda x: print(*x, sep="\n")def II(): return int(sys.stdin.readline())def MI(): return map(int, sys.stdin.readline().split())def LI(): return list(map(int, sys.stdin.readline().split()))def LLI(rows_number): return [LI() for _ in range(rows_number)]def SI(): return sys.stdin.readline()[:-1]n=II()aa=LI()# 遅延セグツリーの準備...sq2乗和、sm和、lz遅延wd=1<<(n-1).bit_length()sq=[0]*2*wdsm=[0]*2*wdlz=[0]*2*wdfor i,a in enumerate(aa):sq[wd+i]=a**2sm[wd:wd+n]=aafor u in range(wd-1,0,-1):sq[u]=sq[u*2]+sq[u*2+1]sm[u]=sm[u*2]+sm[u*2+1]def _eval(u,tl,tr):sq[u]+=lz[u]**2*(tr-tl)+2*sm[u]*lz[u]sm[u]+=lz[u]*(tr-tl)if u<wd:lz[u*2]+=lz[u]lz[u*2+1]+=lz[u]lz[u]=0def add(l,r,d,u=1,tl=0,tr=-1):if tr==-1:tr=wdif r<=tl or tr<=l:_eval(u,tl,tr)returnif l<=tl and tr<=r:lz[u]+=d_eval(u,tl,tr)return_eval(u, tl, tr)tm=(tl+tr)//2add(l,r,d,u*2,tl,tm)add(l,r,d,u*2+1,tm,tr)sq[u]=sq[u*2]+sq[u*2+1]sm[u]=sm[u*2]+sm[u*2+1]def sqsum(l,r,u=1,tl=0,tr=-1):if tr==-1:tr=wdif r<=tl or tr<=l:return 0_eval(u,tl,tr)if l<=tl and tr<=r:return sq[u]tm=(tl+tr)//2return sqsum(l,r,u*2,tl,tm)+sqsum(l,r,u*2+1,tm,tr)for _ in range(II()):q=LI()if q[0]==1:_,l,r,d=qadd(l-1,r,d)else:_,l,r=qprint(sqsum(l-1,r))