結果

問題 No.3503 Brackets Stack Query 2
コンテスト
ユーザー テナガザル
提出日時 2026-04-17 21:03:30
言語 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
結果
AC  
実行時間 1,239 ms / 2,000 ms
コード長 1,409 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,336 ms
コンパイル使用メモリ 170,184 KB
実行使用メモリ 17,556 KB
最終ジャッジ日時 2026-04-17 21:04:20
合計ジャッジ時間 36,150 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
  int q;
  cin >> q;
  string sign = "(|)";
  int id[2 * q + 1] = {0};
  vector<int> mi, sum;
  mi.push_back(0);
  sum.push_back(0);
  int len = 0, dep = q;
  string s;
  int bq = q;
  while (q--)
  {
    int t;
    cin >> t;
    if (t == 1)
    {
      char c;
      cin >> c;
      if (c == '(')
      {
        ++dep;
        int tmp = sum.back() + 1;
        if (id[dep] != 0) tmp = -1;
        ++id[dep];
        sum.push_back(tmp);
      }
      else if (c == '|')
      {
        int tmp = sum.back();
        if (id[dep] != 1) tmp = -1;
        ++id[dep];
        sum.push_back(tmp);
      }
      else if (c == ')')
      {
        int tmp = sum.back() - 1;
        if (id[dep] != 2) tmp = -1;
        id[dep] -= 2;
        --dep;
        sum.push_back(tmp);
      }
      s.push_back(c);
      ++len;
      mi.push_back(min(mi.back(), sum.back()));
    }
    else if (t == 2)
    {
      char c = s.back();
      if (c == '(')
      {
        --id[dep];
        --dep;
      }
      else if (c == '|')
      {
        --id[dep];
      }
      else if (c == ')')
      {
        ++dep; 
        id[dep] += 2;
      }
      --len;
      s.pop_back();
      sum.pop_back();
      mi.pop_back();
    }
    cout << (len % 3 == 0 && dep == bq && sum.back() == 0 && mi.back() == 0 ? "Yes" : "No") << endl;
  }
}
0