結果
| 問題 | No.1778 括弧列クエリ / Bracketed Sequence Query |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-28 23:21:52 |
| 言語 | Kotlin (2.3.20) |
| 結果 |
AC
|
| 実行時間 | 1,655 ms / 2,000 ms |
| コード長 | 1,054 bytes |
| 記録 | |
| コンパイル時間 | 11,584 ms |
| コンパイル使用メモリ | 481,488 KB |
| 実行使用メモリ | 116,312 KB |
| 最終ジャッジ日時 | 2026-06-04 01:35:16 |
| 合計ジャッジ時間 | 46,667 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 27 |
ソースコード
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"})
}