結果
問題 | No.2359 A in S ? |
ユーザー | LyricalMaestro |
提出日時 | 2024-12-08 03:24:45 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 1,043 ms / 2,000 ms |
コード長 | 1,925 bytes |
コンパイル時間 | 571 ms |
コンパイル使用メモリ | 82,432 KB |
実行使用メモリ | 144,440 KB |
最終ジャッジ日時 | 2024-12-08 03:25:02 |
合計ジャッジ時間 | 17,178 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 43 ms
52,096 KB |
testcase_01 | AC | 43 ms
52,224 KB |
testcase_02 | AC | 89 ms
68,992 KB |
testcase_03 | AC | 52 ms
59,136 KB |
testcase_04 | AC | 738 ms
135,100 KB |
testcase_05 | AC | 1,043 ms
139,496 KB |
testcase_06 | AC | 717 ms
131,276 KB |
testcase_07 | AC | 319 ms
137,148 KB |
testcase_08 | AC | 952 ms
143,936 KB |
testcase_09 | AC | 886 ms
144,440 KB |
testcase_10 | AC | 920 ms
141,796 KB |
testcase_11 | AC | 917 ms
139,076 KB |
testcase_12 | AC | 702 ms
135,100 KB |
testcase_13 | AC | 729 ms
133,400 KB |
testcase_14 | AC | 749 ms
125,260 KB |
testcase_15 | AC | 870 ms
144,276 KB |
testcase_16 | AC | 960 ms
134,152 KB |
testcase_17 | AC | 969 ms
134,128 KB |
testcase_18 | AC | 971 ms
133,892 KB |
testcase_19 | AC | 972 ms
134,024 KB |
ソースコード
## https://yukicoder.me/problems/no/2359 import math def main(): N, M = map(int, input().split()) lrxy = [] for _ in range(N): l, r, x, y = map(int, input().split()) lrxy.append((l,r,x,y)) A = list(map(int, input().split())) # イベント in_events = {} out_events = {} max_r = 0 for i in range(N): l, r, x, y = lrxy[i] if l not in in_events: in_events[l] = [] in_events[l].append((i, x, y)) if r not in out_events: out_events[r] = [] out_events[r].append((i, x, y)) max_r = max(r, max_r) sqrt_max_r = int(math.sqrt(max_r)) counts_map = [[0] * max(1, x) for x in range(sqrt_max_r + 1)] all_map = [0] * (max_r + 1) answer_map = {} for j in range(M): if A[j] not in answer_map: answer_map[A[j]] = [] answer_map[A[j]].append(j) answers = [0] * M for i in range(1, max_r + 1): if i in in_events: for _, x, y in in_events[i]: if x <= sqrt_max_r: counts_map[x][y] += 1 else: z = y while z <= max_r: all_map[z] += 1 z += x if i in answer_map: ans = all_map[i] for z in range(1, sqrt_max_r + 1): ans += counts_map[z][i % z] for j in answer_map[i]: answers[j] = ans if i in out_events: for _, x, y in out_events[i]: if x <= sqrt_max_r: counts_map[x][y] -= 1 else: z = y while z <= max_r: all_map[z] -= 1 z += x for j in range(M): print(answers[j]) if __name__ == "__main__": main()