結果

問題 No.3503 Brackets Stack Query 2
コンテスト
ユーザー Azaki
提出日時 2026-04-18 03:35:34
言語 C++23
(gcc 15.2.0 + boost 1.89.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,758 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,204 ms
コンパイル使用メモリ 164,384 KB
実行使用メモリ 6,400 KB
最終ジャッジ日時 2026-04-18 03:35:45
合計ジャッジ時間 6,222 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 6 WA * 24
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <vector>
#include <string>

using namespace std;

/**
 * Bài toán: No.3503 Brackets Stack Query 2
 * Độ phức tạp: O(Q) - Mỗi truy vấn xử lý trong O(1)
 */

int main() {
    // Tối ưu tốc độ nhập xuất
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int Q;
    cin >> Q;

    // Duy trì stack ký tự và trạng thái dp
    // dp[i] = true nếu chuỗi S độ dài i là "dãy ngoặc gậy tốt"
    vector<char> s_stack;
    vector<bool> dp(Q + 1, false);

    // Chuỗi rỗng luôn là dãy tốt
    dp[0] = true;
    int current_len = 0;

    for (int i = 0; i < Q; ++i) {
        int type;
        cin >> type;

        if (type == 1) {
            char c;
            cin >> c;
            s_stack.push_back(c);
            current_len++;

            // Kiểm tra xem tại độ dài current_len, chuỗi có "tốt" không
            // Điều kiện: 3 ký tự cuối cùng tạo thành (|) và phần trước đó cũng phải tốt
            if (current_len >= 3 && 
                s_stack[current_len - 1] == ')' && 
                s_stack[current_len - 2] == '|' && 
                s_stack[current_len - 3] == '(') {
                
                dp[current_len] = dp[current_len - 3];
            } else {
                dp[current_len] = false;
            }
        } else {
            // Truy vấn loại 2: Xóa ký tự cuối
            if (!s_stack.empty()) {
                s_stack.pop_back();
                current_len--;
            }
        }

        // Xuất kết quả sau mỗi truy vấn
        if (dp[current_len]) {
            cout << "Yes\n";
        } else {
            cout << "No\n";
        }
    }

    return 0;
}
0