結果
| 問題 |
No.1778 括弧列クエリ / Bracketed Sequence Query
|
| コンテスト | |
| ユーザー |
Wizist
|
| 提出日時 | 2021-12-11 18:23:10 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,147 bytes |
| コンパイル時間 | 807 ms |
| コンパイル使用メモリ | 82,432 KB |
| 実行使用メモリ | 93,952 KB |
| 最終ジャッジ日時 | 2024-07-20 00:54:50 |
| 合計ジャッジ時間 | 28,582 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 21 TLE * 2 -- * 4 |
ソースコード
from bisect import bisect_left
def rmq_update(t, i, val, f=min):
t[i + len(t) // 2] = val
i = (i + len(t) // 2) // 2
while i > 0:
t[i] = f(t[i * 2], t[i * 2 + 1])
i //= 2
def rmq_query(t, l, r, f=min, def_val=0x7fffffff):
i, j, a, b = l + len(t) // 2, r + len(t) // 2, def_val, def_val
while i < j:
if i % 2 != 0: a = f(a, t[i]); i += 1
if j % 2 != 0: j -= 1; b = f(b, t[j])
i, j = i // 2, j // 2
return f(a, b)
N, Q = map(int, input().split())
s = input().strip()
p = [0] * N
st = []
for i, x in enumerate(s):
if x == '(':
st.append(i)
else:
p[i] = st[-1]
p[st[-1]] = i
st.pop()
a = [(i, p[i]) for i, x in enumerate(s) if x == '(']
t1, t2 = [N] * (N * 2), [-1] * (N * 2)
for i, x in enumerate(p):
rmq_update(t1, i, x, min)
rmq_update(t2, i, x, max)
for _ in range(Q):
x, y = map(int, input().split())
x -= 1; y -= 1
if x > y: x, y = y, x
l = min(rmq_query(t1, x, y + 1, min, N), x)
r = max(rmq_query(t2, x, y + 1, max, 0), y)
i = bisect_left(a, (l, r))
while i < len(a) and i >= 0:
if a[i][0] <= l and a[i][1] >= r: break
i -= 1
if i < 0 or i >= len(a): print(-1)
else: print(a[i][0] + 1, a[i][1] + 1)
Wizist