結果
問題 | 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"}) }