結果
| 問題 |
No.1014 competitive fighting
|
| コンテスト | |
| ユーザー |
mkawa2
|
| 提出日時 | 2020-03-23 23:57:14 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,217 bytes |
| コンパイル時間 | 630 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 207,484 KB |
| 最終ジャッジ日時 | 2024-12-29 17:32:58 |
| 合計ジャッジ時間 | 44,442 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 45 WA * 5 TLE * 1 |
ソースコード
from bisect import bisect_right
from heapq import *
import sys
sys.setrecursionlimit(10 ** 6)
int1 = lambda x: int(x) - 1
p2D = 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]
def main():
def connect(j,l,r,sl=0,sr=-1,si=0):
if sr==-1:sr=w
if r<=sl or sr<=l:return
if l<=sl and sr<=r:
to[j+w-1].append(si)
return
sm=(sl+sr)//2
connect(j,l,r,sl,sm,si*2+1)
connect(j,l,r,sm,sr,si*2+2)
def dfs(u,start=-1):
if start==-1:start=u
for v in to[u]:
if vis[v]==start:
dp[u]=inf
break
if vis[v]==-1:
vis[v]=start
dfs(v,start)
if dp[v]==inf:
dp[u]=inf
break
dp[u]=max(dp[u],dp[v])
if u>=w-1:
_,b,_,i=abci[u-w+1]
if dp[u]!=inf:dp[u]+=b
ans[i]=dp[u]
inf=10**15
n=II()
abci=[]
w=1<<(n-1).bit_length()
to=[[] for _ in range(w-1+n)]
for i in range(w-2+n,0,-1):to[(i-1)//2].append(i)
for i in range(n):
a,b,c=MI()
abci.append((a,b,c,i))
# aの小さい順に見ていってセグメント木に辺を張る
abci.sort()
aa=[]
hp=[]
for j,(a,b,c,i) in enumerate(abci):
while hp and hp[0][0]<a:
_,pj=heappop(hp)
connect(pj,0,pj)
connect(pj,pj+1,j)
if b-c<a:
k=bisect_right(aa,b-c)
connect(j,0,k)
else:
heappush(hp,(b-c,j))
aa.append(a)
while hp:
_, pj = heappop(hp)
connect(pj, 0, pj)
connect(pj, pj + 1, n)
# dfsで最大スコアを求める
dp=[0]*(2*w-1)
vis=[-1]*(2*w-1)
ans=[0]*n
for j in range(n):
u=j+w-1
if vis[u]!=-1:continue
vis[u]=u
dfs(u)
# 答えの出力
for x in ans:
if x==inf:print("BAN")
else:print(x)
main()
mkawa2