結果
| 問題 | No.1170 Never Want to Walk |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-08 15:36:39 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 846 ms / 2,000 ms |
| コード長 | 1,533 bytes |
| 記録 | |
| コンパイル時間 | 303 ms |
| コンパイル使用メモリ | 82,568 KB |
| 実行使用メモリ | 282,892 KB |
| 最終ジャッジ日時 | 2025-12-08 15:36:51 |
| 合計ジャッジ時間 | 12,173 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 37 |
ソースコード
import sys
sys.setrecursionlimit(10 ** 6)
def input(): return sys.stdin.readline().rstrip('\n')
class DSU:
def __init__(self, n):
self.p = list(range(n))
def find(self, x):
if x == self.p[x]:
return x
self.p[x] = self.find(self.p[x])
return self.p[x]
def union(self, a, b):
self.p[self.find(a)] = self.find(b)
def main():
n, a, b = map(int, input().split())
*x, = map(int, input().split())
dsu = DSU(n)
def connect(f, t):
a, b = f
c, d = t
for i in range(a, b-1):
dsu.union(i, i + 1)
for i in range(c, d-1):
dsu.union(i, i + 1)
dsu.union(a, c)
ja = jb = 0
pri = prr = None
for i in range(n):
while ja < n and x[ja] < x[i] + a:
ja += 1
while jb < n and x[jb] <= x[i] + b:
jb += 1
if pri is None:
if ja != jb:
pri, prr = (i, i + 1), (ja, jb)
else:
prs, pre = prr
if ja != jb and pre > ja:
pri, prr = (pri[0], i + 1), (prs, jb)
else:
connect(pri, prr)
pri = prr = None
if ja != jb:
pri, prr = (i, i + 1), (ja, jb)
if pri is not None:
connect(pri, prr)
ans = [0] * n
for i in range(n): ans[dsu.find(i)] += 1
for i in range(n): print(ans[dsu.find(i)])
if __name__ == '__main__':
ret = main()
if ret is not None:
print(ret)