結果
| 問題 |
No.1778 括弧列クエリ / Bracketed Sequence Query
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-12-19 14:15:02 |
| 言語 | C#(csc) (csc 3.9.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,369 bytes |
| コンパイル時間 | 2,559 ms |
| コンパイル使用メモリ | 108,800 KB |
| 実行使用メモリ | 827,796 KB |
| 最終ジャッジ日時 | 2024-09-15 14:31:53 |
| 合計ジャッジ時間 | 20,461 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 1 |
| other | AC * 18 WA * 7 MLE * 1 -- * 1 |
コンパイルメッセージ
Microsoft (R) Visual C# Compiler version 3.9.0-6.21124.20 (db94f4cc) Copyright (C) Microsoft Corporation. All rights reserved.
ソースコード
using System;
using System.Collections.Generic;
using System.Linq;
class G
{
static int[] Read() => Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
static (int, int) Read2() { var a = Read(); return (a[0], a[1]); }
static void Main() => Console.WriteLine(Solve());
static object Solve()
{
var (n, qc) = Read2();
var s = Console.ReadLine();
var qs = Array.ConvertAll(new bool[qc], _ => Read2());
var map = Array.ConvertAll(new bool[n + 1], _ => new List<int>());
var end = new int[qc];
for (int qi = 0; qi < qc; qi++)
{
var (x, y) = qs[qi];
map[x].Add(qi);
if (x != y) map[y].Add(qi);
end[qi] = Math.Max(x, y);
}
// 片方が通過したクエリの ID
var umap = Array.ConvertAll(map, _ => new List<int>());
var r = new (int l, int r)[qc];
var st = new Stack<int>();
st.Push(0);
for (int i = 1; i <= n; i++)
{
if (s[i - 1] == '(')
{
st.Push(i);
foreach (var qi in map[i])
if (i <= end[qi]) umap[i].Add(qi);
}
else
{
var l = st.Pop();
var pl = st.Peek();
foreach (var qi in map[i])
if (i <= end[qi]) umap[l].Add(qi);
foreach (var qi in umap[l])
{
if (end[qi] <= i)
{
r[qi] = (l, i);
}
else
{
umap[pl].Add(qi);
}
}
}
}
return string.Join("\n", r.Select(p => p.l == 0 ? "-1" : $"{p.l} {p.r}"));
}
}