結果
| 問題 |
No.3214 small square
|
| コンテスト | |
| ユーザー |
ゼット
|
| 提出日時 | 2025-08-04 21:43:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,660 ms / 3,000 ms |
| コード長 | 1,984 bytes |
| コンパイル時間 | 239 ms |
| コンパイル使用メモリ | 82,252 KB |
| 実行使用メモリ | 199,352 KB |
| 最終ジャッジ日時 | 2025-08-04 21:44:17 |
| 合計ジャッジ時間 | 46,694 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 |
ソースコード
class segtree:
def __init__(self,n):
self.size=1
self.height=0
while self.size<n:
self.size*=2
self.height+=1
self.dat=[0]*(self.size*2)
self.lazy=[0]*(self.size*2)
def lazyup(self,l,r,a):
l+=self.size
r+=self.size
while l<r:
if l&1:
self.lazy[l]+=a
l+=1
if r&1:
r-=1
self.lazy[r]+=a
l//=2
r//=2
def querry(self,l,r):
l+=self.size
r+=self.size
score=-10**10
while l<r:
if l&1:
w=self.dat[l]+self.lazy[l]
score=max(score,w)
l+=1
if r&1:
r-=1
w=self.dat[r]+self.lazy[r]
score=max(score,w)
l//=2
r//=2
return score
def propagate(self,x):
x+=self.size
for h in range(self.height,0,-1):
y=x>>h
self.lazy[2*y]+=self.lazy[y]
self.lazy[2*y+1]+=self.lazy[y]
self.dat[y]+=self.lazy[y]
self.lazy[y]=0
def bottom(self,x):
x+=self.size
while x>1:
x//=2
self.dat[x]=max(self.dat[2*x]+self.lazy[2*x],self.dat[2*x+1]+self.lazy[2*x+1])
N,K=map(int,input().split())
Ax=set()
Ay=set()
Tx={}
Ty={}
L=[]
for i in range(N):
x,y,w=map(int,input().split())
L.append((2*x,2*y,w))
Ax.add(2*x)
Ay.add(2*y)
Ax.add(2*x+2*K+1)
Ay.add(2*y+2*K+1)
Ax=list(Ax)
Ay=list(Ay)
Ax.sort()
Ay.sort()
Mx=len(Ax)
My=len(Ay)
for i in range(Mx):
Tx[Ax[i]]=i
for i in range(My):
Ty[Ay[i]]=i
Gx=[[] for i in range(Mx)]
for i in range(N):
x,y,w=L[i][:]
px,py=Tx[x],Ty[y]
px2,py2=Tx[x+2*K+1],Ty[y+2*K+1]
Gx[px].append((py,+w))
Gx[px].append((py2,-w))
Gx[px2].append((py,-w))
Gx[px2].append((py2,w))
result=0
Z=segtree(My)
for i in range(Mx):
for B in Gx[i]:
pos,w=B[:]
Z.propagate(pos)
Z.propagate(My-1)
Z.lazyup(pos,My,w)
Z.bottom(pos)
Z.bottom(My-1)
Z.propagate(0)
Z.propagate(My-1)
ans=Z.querry(0,My)
result=max(result,ans)
print(result)
ゼット