結果
| 問題 |
No.1170 Never Want to Walk
|
| コンテスト | |
| ユーザー |
trineutron
|
| 提出日時 | 2020-08-15 16:08:33 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 933 bytes |
| コンパイル時間 | 301 ms |
| コンパイル使用メモリ | 12,672 KB |
| 実行使用メモリ | 33,148 KB |
| 最終ジャッジ日時 | 2024-10-10 18:02:37 |
| 合計ジャッジ時間 | 14,622 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 36 RE * 1 |
ソースコード
import sys
class UnionFind:
par = []
def __init__(self, n):
self.par = [i for i in range(n)]
def find(self, n):
if self.par[n] == n:
return n
p = self.find(self.par[n])
self.par[n] = p
return p
def merge(self, m, n):
m = self.find(m)
n = self.find(n)
self.par[m] = n
sys.setrecursionlimit(20000)
n, a, b = map(int, input().split())
x = list(map(int, input().split()))
v = [0] * (n + 1)
l = 0
r = 0
t = UnionFind(n)
for i in range(n):
while l < n and x[l] < x[i] + a:
l += 1
while r < n and x[r] <= x[i] + b:
r += 1
if l == r:
continue
v[l] += 1
v[r - 1] -= 1
t.merge(i, l)
for i in range(n):
v[i + 1] += v[i]
if v[i] > 0:
t.merge(i, i + 1)
y = [0] * n
s = [0] * n
for i in range(n):
y[i] = t.find(i)
s[y[i]] += 1
for i in range(n):
print(s[y[i]])
trineutron