結果
問題 | No.878 Range High-Element Query |
ユーザー | tktk_snsn |
提出日時 | 2022-02-19 16:07:40 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 165 ms / 2,000 ms |
コード長 | 735 bytes |
コンパイル時間 | 134 ms |
コンパイル使用メモリ | 82,348 KB |
実行使用メモリ | 101,912 KB |
最終ジャッジ日時 | 2024-06-29 10:26:50 |
合計ジャッジ時間 | 3,224 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 33 ms
52,700 KB |
testcase_01 | AC | 46 ms
63,808 KB |
testcase_02 | AC | 44 ms
65,004 KB |
testcase_03 | AC | 43 ms
63,264 KB |
testcase_04 | AC | 44 ms
63,336 KB |
testcase_05 | AC | 46 ms
64,636 KB |
testcase_06 | AC | 39 ms
60,768 KB |
testcase_07 | AC | 37 ms
59,312 KB |
testcase_08 | AC | 43 ms
64,916 KB |
testcase_09 | AC | 43 ms
64,216 KB |
testcase_10 | AC | 44 ms
64,264 KB |
testcase_11 | AC | 152 ms
97,076 KB |
testcase_12 | AC | 127 ms
99,592 KB |
testcase_13 | AC | 148 ms
91,504 KB |
testcase_14 | AC | 127 ms
88,844 KB |
testcase_15 | AC | 128 ms
96,564 KB |
testcase_16 | AC | 149 ms
101,816 KB |
testcase_17 | AC | 165 ms
101,908 KB |
testcase_18 | AC | 159 ms
101,912 KB |
ソースコード
import sys input = sys.stdin.buffer.readline sys.setrecursionlimit(10 ** 7) N, Q = map(int, input().split()) D = (N + 1).bit_length() P = list(map(lambda x: int(x) - 1, input().split())) par = [[N] * (N + 1) for _ in range(D)] stack = [] for i, p in enumerate(P): while stack and P[stack[-1]] < p: j = stack.pop() par[0][j] = i stack.append(i) while stack: j = stack.pop() par[0][j] = N for d in range(1, D): for i in range(N): par[d][i] = par[d-1][par[d-1][i]] for _ in range(Q): _, L, R = map(int, input().split()) x = L - 1 ans = 1 for d in reversed(range(D)): if par[d][x] >= R: continue ans += 1 << d x = par[d][x] print(ans)