結果
| 問題 | No.3507 RangeSum RangeUpdate RangeSqrt |
| コンテスト | |
| ユーザー |
YuukunA
|
| 提出日時 | 2026-04-19 11:46:57 |
| 言語 | Python3 (3.14.3 + numpy 2.4.4 + scipy 1.17.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,878 bytes |
| 記録 | |
| コンパイル時間 | 440 ms |
| コンパイル使用メモリ | 20,700 KB |
| 実行使用メモリ | 46,144 KB |
| 最終ジャッジ日時 | 2026-04-19 11:47:44 |
| 合計ジャッジ時間 | 9,525 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 1 |
| other | AC * 2 TLE * 1 -- * 26 |
ソースコード
import sys
from math import isqrt
def main():
sys.setrecursionlimit(300000)
d = sys.stdin.buffer.read().split(); i = 0
N, Q = int(d[0]), int(d[1]); i = 2
A = list(map(int, d[i:i+N])); i += N
M = 1
while M < N: M <<= 1
S = [0]*(2*M); X = [0]*(2*M); T = [-1]*(2*M)
for k in range(N): S[M+k] = X[M+k] = T[M+k] = A[k]
for k in range(M+N, 2*M): T[k] = 0
for v in range(M-1, 0, -1):
S[v] = S[2*v]+S[2*v+1]
X[v] = max(X[2*v], X[2*v+1])
T[v] = T[2*v] if T[2*v] != -1 and T[2*v] == T[2*v+1] else -1
def put(v, n, x): S[v], X[v], T[v] = x*n, x, x
def push(v, a, b):
if T[v] != -1: put(2*v, a, T[v]); put(2*v+1, b, T[v]); T[v] = -1
def pull(v):
S[v] = S[2*v]+S[2*v+1]; X[v] = max(X[2*v], X[2*v+1])
T[v] = T[2*v] if T[2*v] != -1 and T[2*v] == T[2*v+1] else -1
def asn(v,l,r,ql,qr,x):
if qr<=l or r<=ql: return
if ql<=l and r<=qr: put(v,r-l,x); return
m=(l+r)>>1; push(v,m-l,r-m)
asn(2*v,l,m,ql,qr,x); asn(2*v+1,m,r,ql,qr,x); pull(v)
def sqr(v,l,r,ql,qr):
if qr<=l or r<=ql or X[v]<=1: return
if ql<=l and r<=qr and T[v]!=-1: put(v,r-l,isqrt(T[v])); return
m=(l+r)>>1; push(v,m-l,r-m)
sqr(2*v,l,m,ql,qr); sqr(2*v+1,m,r,ql,qr); pull(v)
def qs(v,l,r,ql,qr):
if qr<=l or r<=ql: return 0
if ql<=l and r<=qr: return S[v]
m=(l+r)>>1; push(v,m-l,r-m)
return qs(2*v,l,m,ql,qr)+qs(2*v+1,m,r,ql,qr)
out = []
for _ in range(Q):
t = d[i]; i += 1
if t == b'0':
l,r = int(d[i]),int(d[i+1]); i+=2; out.append(str(qs(1,0,M,l,r)))
elif t == b'1':
l,r,x = int(d[i]),int(d[i+1]),int(d[i+2]); i+=3; asn(1,0,M,l,r,x)
else:
l,r = int(d[i]),int(d[i+1]); i+=2; sqr(1,0,M,l,r)
sys.stdout.write('\n'.join(out))
main()
YuukunA