結果
| 問題 |
No.1008 Bench Craftsman
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-03-06 23:10:31 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,096 bytes |
| コンパイル時間 | 219 ms |
| コンパイル使用メモリ | 81,820 KB |
| 実行使用メモリ | 347,920 KB |
| 最終ジャッジ日時 | 2024-10-14 09:39:54 |
| 合計ジャッジ時間 | 4,388 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 1 WA * 1 TLE * 1 -- * 24 |
ソースコード
n, m = map(int, input().split())
a = list(map(int, input().split()))
w = [0] * n
for i in range(m):
u, v = map(int, input().split())
w[u - 1] += v
def ceildiv(a, b):
return -(-a // b)
def check(c):
if c <= 0:
return sum(w) <= min(a)
pt = []
for j in range(n):
u = (w[j] + c * j) // c
if u >= j:
pt.append((j + 1, -c, w[j] + c * j))
pt.append((u + 1, c, -(w[j] + c * j)))
u = ceildiv(c * j - w[j], c)
if u <= j:
pt.append((u, c, w[j] - c * j))
pt.append((j, -c, -(w[j] - c * j)))
pt.append((j, 0, w[j]))
pt.append((j + 1, 0, -w[j]))
pt.sort()
u, v = 0, 0
cur = 0
for i in range(n):
while cur < len(pt) and pt[cur][0] <= i:
u += pt[cur][1]
v += pt[cur][2]
cur += 1
if u * i + v > a[i]:
return False
return True
l, r = -1, 10 ** 18
while r - l > 1:
mid = (l + r) // 2
if check(mid):
r = mid
else:
l = mid
if r >= 10 ** 18:
print(-1)
exit()
print(r)