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