結果
| 問題 |
No.1778 括弧列クエリ / Bracketed Sequence Query
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-28 23:21:52 |
| 言語 | Kotlin (2.1.0) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 1,054 bytes |
| コンパイル時間 | 19,845 ms |
| コンパイル使用メモリ | 452,924 KB |
| 実行使用メモリ | 114,924 KB |
| 最終ジャッジ日時 | 2024-12-30 11:40:14 |
| 合計ジャッジ時間 | 62,810 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 25 TLE * 2 |
ソースコード
import java.util.*
fun main() {
val (n, q) = readLine()!!.split(' ').map(String::toInt)
val s = readLine()!!
val queries = List(q) {
val (x, y) = readLine()!!.trim().split(' ').map(String::toInt)
minOf(x, y) - 1 to maxOf(x, y) - 1
}
val stack = mutableListOf<Int>()
val pair = IntArray(n)
for (i in s.indices) {
when(s[i]) {
'(' -> stack.add(i)
')' -> {
val l = stack.removeLast()
pair[l] = i
pair[i] = l
}
}
}
val set = TreeSet<Int>()
var last = 0
val result = IntArray(q){-1}
for ((index, p) in queries.withIndex().sortedBy { it.value.first }) {
val (min, max) = p
while (last < n && last <= min) {
if (s[last] == '(') {
set.add(pair[last])
}
last += 1
}
result[index] = set.higher(max - 1) ?: continue
}
println(result.joinToString("\n"){i -> if (i >= 0) "${pair[i] + 1} ${i + 1}" else "-1"})
}