結果
問題 | No.2374 ASKT Subsequences |
ユーザー | Ekiben542 |
提出日時 | 2023-07-08 08:26:21 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,138 bytes |
コンパイル時間 | 389 ms |
コンパイル使用メモリ | 87,008 KB |
実行使用メモリ | 81,112 KB |
最終ジャッジ日時 | 2023-09-29 09:41:32 |
合計ジャッジ時間 | 7,511 ms |
ジャッジサーバーID (参考情報) |
judge13 / judge12 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 70 ms
71,368 KB |
testcase_01 | AC | 70 ms
71,116 KB |
testcase_02 | AC | 70 ms
71,280 KB |
testcase_03 | AC | 75 ms
71,320 KB |
testcase_04 | AC | 70 ms
71,284 KB |
testcase_05 | AC | 75 ms
71,204 KB |
testcase_06 | AC | 70 ms
71,348 KB |
testcase_07 | AC | 71 ms
71,516 KB |
testcase_08 | AC | 71 ms
71,556 KB |
testcase_09 | AC | 72 ms
71,552 KB |
testcase_10 | AC | 77 ms
75,744 KB |
testcase_11 | AC | 88 ms
76,436 KB |
testcase_12 | AC | 83 ms
76,100 KB |
testcase_13 | AC | 79 ms
75,956 KB |
testcase_14 | AC | 105 ms
77,128 KB |
testcase_15 | AC | 99 ms
77,172 KB |
testcase_16 | AC | 103 ms
77,144 KB |
testcase_17 | AC | 107 ms
77,356 KB |
testcase_18 | AC | 127 ms
77,348 KB |
testcase_19 | AC | 122 ms
77,656 KB |
testcase_20 | AC | 126 ms
77,572 KB |
testcase_21 | AC | 162 ms
78,092 KB |
testcase_22 | AC | 142 ms
77,808 KB |
testcase_23 | AC | 117 ms
77,200 KB |
testcase_24 | AC | 141 ms
77,440 KB |
testcase_25 | TLE | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
ソースコード
def find_first_greater_than_m(sorted_list, m): left = 0 right = len(sorted_list) - 1 result = -1 while left <= right: mid = (left + right) // 2 if sorted_list[mid] > m: result = mid right = mid - 1 else: left = mid + 1 return result #対数時間だから許して... def count_asakatsu_subsequences(N, A): cnt = 0 indices = {} for i, a in enumerate(A): if a not in indices: indices[a] = [] indices[a].append(i) for i in range(N - 3): for j in range(i + 1, N - 2): k = A[j] - A[i] - 10 if k > 0: m_values = indices.get(A[j] - k, []) for m in m_values: if m > j: n_values = indices.get(A[m] + k + 1, []) first_n = find_first_greater_than_m(n_values, m) if first_n != -1: cnt += len(n_values[first_n:]) return cnt N = int(input()) A = list(map(int, input().split())) result = count_asakatsu_subsequences(N, A) print(result)