結果
| 問題 | No.3503 Brackets Stack Query 2 |
| コンテスト | |
| ユーザー |
sient
|
| 提出日時 | 2026-04-17 23:31:24 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 53 ms / 2,000 ms |
| コード長 | 1,707 bytes |
| 記録 | |
| コンパイル時間 | 3,673 ms |
| コンパイル使用メモリ | 333,920 KB |
| 実行使用メモリ | 16,768 KB |
| 最終ジャッジ日時 | 2026-04-17 23:31:37 |
| 合計ジャッジ時間 | 8,290 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 30 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int Q;
cin >> Q;
vector<int> prev_ver(Q + 1, -1), top_ptr(Q + 1, -1);
vector<char> ok(Q + 1, 1);
vector<int> parent(Q + 5, -1), state(Q + 5, 0);
int node_cnt = 0;
int cur = 0;
int ver_cnt = 0;
auto new_node = [&](int par, int st) {
++node_cnt;
parent[node_cnt] = par;
state[node_cnt] = st;
return node_cnt;
};
for (int qi = 0; qi < Q; ++qi) {
int t;
cin >> t;
if (t == 1) {
char c;
cin >> c;
++ver_cnt;
prev_ver[ver_cnt] = cur;
top_ptr[ver_cnt] = top_ptr[cur];
ok[ver_cnt] = ok[cur];
if (ok[ver_cnt]) {
if (c == '(') {
top_ptr[ver_cnt] = new_node(top_ptr[ver_cnt], 0);
} else if (c == '|') {
int tp = top_ptr[ver_cnt];
if (tp != -1 && state[tp] == 0) {
top_ptr[ver_cnt] = new_node(parent[tp], 1);
} else {
ok[ver_cnt] = 0;
}
} else { // ')'
int tp = top_ptr[ver_cnt];
if (tp != -1 && state[tp] == 1) {
top_ptr[ver_cnt] = parent[tp];
} else {
ok[ver_cnt] = 0;
}
}
}
cur = ver_cnt;
} else {
cur = prev_ver[cur];
}
cout << ((ok[cur] && top_ptr[cur] == -1) ? "Yes\n" : "No\n");
}
return 0;
}
sient