結果
問題 | No.59 鉄道の旅 |
ユーザー |
|
提出日時 | 2024-03-03 12:15:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 129 ms / 5,000 ms |
コード長 | 1,883 bytes |
コンパイル時間 | 200 ms |
コンパイル使用メモリ | 82,264 KB |
実行使用メモリ | 85,520 KB |
最終ジャッジ日時 | 2024-09-29 16:45:42 |
合計ジャッジ時間 | 2,575 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 12 |
ソースコード
import sysimport mathimport bisectfrom heapq import heapify, heappop, heappushfrom collections import deque, defaultdict, Counterfrom functools import lru_cachefrom itertools import accumulate, combinations, permutations, productsys.setrecursionlimit(1000000)MOD = 10 ** 9 + 7MOD99 = 998244353input = lambda: sys.stdin.readline().strip()NI = lambda: int(input())NMI = lambda: map(int, input().split())NLI = lambda: list(NMI())SI = lambda: input()SMI = lambda: input().split()SLI = lambda: list(SMI())EI = lambda m: [NLI() for _ in range(m)]class BIT():"""BIT 0-index ACL for pythonadd(p, x): p番目にxを加算get(p): p番目を取得sum0(r): [0:r)の和を取得sum(l, r): [l:r)の和を取得"""def __init__(self, N):self.n = Nself.data = [0 for i in range(N)]def add(self, p, x):assert 0 <= p < self.n, "0<=p<n,p={0},n={1}".format(p, self.n)p += 1while (p <= self.n):self.data[p - 1] += xp += p & -pdef get(self, p):return self.sum(p, p + 1)def sum(self, l, r):assert (0 <= l and l <= r and r <= self.n), "0<=l<=r<=n,l={0},r={1},n={2}".format(l, r, self.n)return self.sum0(r) - self.sum0(l)def sum0(self, r):s = 0while (r > 0):s += self.data[r - 1]r -= r & -rreturn sdef debug(self):res = [self.get(p) for p in range(self.n)]return resdef main():N, K = NMI()W = [NI() for _ in range(N)]M = 1000000bit = BIT(M+1)for w in W:if w > 0:k = bit.sum(w, M+1)if k < K:bit.add(w, 1)else:w = -wif bit.get(w) > 0:bit.add(w, -1)print(bit.sum(0, M+1))if __name__ == "__main__":main()