結果
| 問題 | No.1778 括弧列クエリ / Bracketed Sequence Query |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-28 22:36:27 |
| 言語 | Scala(Beta) (3.8.2) |
| 結果 |
AC
(最新)
TLE
(最初)
|
| 実行時間 | 1,535 ms / 2,000 ms |
| + 293µs | |
| コード長 | 1,024 bytes |
| 記録 | |
| コンパイル時間 | 8,619 ms |
| コンパイル使用メモリ | 281,868 KB |
| 実行使用メモリ | 125,676 KB |
| 最終ジャッジ日時 | 2026-07-28 17:51:32 |
| 合計ジャッジ時間 | 45,543 ms |
|
ジャッジサーバーID (参考情報) |
judge1_1 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 27 |
ソースコード
import scala.annotation.tailrec
import scala.collection.{immutable, mutable}
import scala.io.StdIn.readLine
import scala.math.*
import scala.annotation.tailrec
@main def main =
val Array(n, q) = readLine().split(' ').map(_.toInt)
val s = readLine()
val queries = Array.fill(q){
val Array(x, y) = readLine().split(' ').map(_.toInt - 1)
min(x, y) -> max(x, y)
}
val stack = mutable.ArrayDeque[Int]()
val pair = Array.fill(n){-1}
for (c, i) <- s.zipWithIndex do
c match
case '(' => stack.addOne(i)
case ')' =>
val h = stack.removeLast()
pair(i) = h
pair(h) = i
val result = Array.fill(q){"-1"}
val set = mutable.TreeSet[Int]()
var last = 0
for ((x, y), i) <- queries.zipWithIndex.sortBy(_._1) do
while last <= x do
if s(last) == '(' then
set.addOne(pair(last))
last += 1
set.minAfter(y) match
case Some(right) => result(i) = s"${pair(right) + 1} ${right + 1}"
case None =>
println(
result.mkString("\n")
)