結果
問題 | No.1864 Shortest Paths Counting |
ユーザー |
![]() |
提出日時 | 2022-03-04 22:30:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 966 ms / 2,000 ms |
コード長 | 1,746 bytes |
コンパイル時間 | 191 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 188,736 KB |
最終ジャッジ日時 | 2024-07-18 21:02:59 |
合計ジャッジ時間 | 17,790 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 23 |
ソースコード
import sysinput = sys.stdin.readlineN = int(input())mod = 998244353a = []for _ in range(N):x, y = map(int, input().split())a.append((x + y, x - y))#print(a)def compress(init_val):t = sorted(set(init_val))d = dict([[t[i], i] for i in range(len(t))])res = [0] * len(init_val)for i in range(len(init_val)): res[i] = d[init_val[i]]return resdef compress2(init_val):xs = compress([init_val[i][0] for i in range(len(init_val))])ys = compress([init_val[i][1] for i in range(len(init_val))])return [(xs[i], ys[i] + 1) for i in range(len(init_val))]a = compress2(a)s = min(a[0], a[-1])t = max(a[0], a[-1])a = sorted(a[1: -1])class BIT:def __init__(self, n):self.n = nself.data = [0] * (n + 1)self.el = [0] * (n + 1)def sum(self, i):s = 0while i > 0:s += self.data[i]s %= modi -= i & -ireturn sdef add(self, i, x):self.el[i] += xself.el[i] %= modwhile i <= self.n:self.data[i] += xself.data[i] %= modi += i & -idef get(self, i, j = None):if j is None:return self.el[i]return (self.sum(j) - self.sum(i)) % moddef lowerbound(self, s):x = 0y = 0for i in range(self.n.bit_length(), -1, -1):k = x + (1 << i)if k <= self.n and (y + self.data[k] < s):y += self.data[k]x += 1 << ireturn x + 1fwk = BIT(N)fwk.add(s[1], 1)#print(s, a, t)if s[1] <= t[1]:for x, y in a:if x in range(s[0], t[0] + 1) and y in range(s[1], t[1] + 1):fwk.add(y, fwk.sum(y))print(fwk.sum(t[1]))else:for x, y in a:if x in range(s[0], t[0] + 1) and y in range(t[1], s[1] + 1):fwk.add(y, fwk.get(y - 1, N))print(fwk.get(t[1] - 1, N))