結果
問題 | No.1864 Shortest Paths Counting |
ユーザー |
|
提出日時 | 2022-01-05 16:58:27 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
AC
|
実行時間 | 1,793 ms / 2,000 ms |
コード長 | 1,226 bytes |
コンパイル時間 | 274 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 50,692 KB |
最終ジャッジ日時 | 2024-07-16 13:13:14 |
合計ジャッジ時間 | 28,097 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 23 |
ソースコード
import bisectimport copymod = 998244353class BinaryIndexedTree:def __init__(self, n):self.n = nself.data = [0] * (n + 1)def add(self, k, x):k += 1while k <= self.n:self.data[k] += xself.data[k] %= modk += k & -kdef sum(self, k):res = 0while k:res += self.data[k]res %= modk -= k & -kreturn resdef compress(A):B = sorted(list(set(A)))for i in range(len(A)):A[i] = bisect.bisect_left(B, A[i])return len(B)N = int(input())X = []Y = []for i in range(N):a, b = map(int, input().split())X += [a + b]Y += [a - b]if X[0] > X[-1]:for i in range(N):X[i] = -X[i]if Y[0] > Y[-1]:for i in range(N):Y[i] = -Y[i]compress(X)K = compress(Y)A = []for i in range(N):if X[0] > X[i] or X[i] > X[-1]:continueif Y[0] > Y[i] or Y[i] > Y[-1]:continueA += [(X[i], Y[i])]M = len(A)A.sort()BIT = BinaryIndexedTree(K)for i in range(M):if i == 0:BIT.add(0, 1)elif i == M - 1:print(BIT.sum(K))else:BIT.add(A[i][1], BIT.sum(A[i][1] + 1))