提出 #70245646


ソースコード 拡げる

#include <bits/stdc++.h>

#include <atcoder/all>

using namespace std;
using namespace atcoder;

#define int long long
#define ALL(x) (x).begin(), (x).end()
#define MAX(x) *max_element(ALL(x))
#define MIN(x) *min_element(ALL(x))

typedef pair<int, int> PI;
typedef pair<int, pair<int, int>> PII;
static const int INF = 1010000000000000017LL;
static const double eps = 1e-12;
static const double pi = 3.14159265358979323846;
static const int dx[4] = {1, -1, 0, 0};
static const int dy[4] = {0, 0, 1, -1};
static const int ddx[8] = {1, -1, 0, 0, 1, 1, -1, -1};
static const int ddy[8] = {0, 0, 1, -1, 1, -1, 1, -1};

template <class T>
inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template <class T>
inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}

int Q;

signed main() {
    cin >> Q;
    string S = "";
    int b = 0;
    int mi;

    vector<int> A(Q, 0);
    auto op = [](int a, int b) { return min(a, b); };
    auto e = []() { return INF; };
    segtree<int, op, e> seg(A);

    while (Q--) {
        int q;
        cin >> q;
        if (q == 1) {
            char c;
            cin >> c;
            if (c == '(') {
                b++;
            } else {
                b--;
            }
            S.push_back(c);
            int k = S.size();
            seg.set(k - 1, b);
            mi = seg.prod(0, k);
        } else {
            if (S[S.size() - 1] == '(') {
                b--;
            } else {
                b++;
            }
            S.pop_back();

            int k = S.size();

            if (k == 0) {
                mi = 0;
            } else {
                seg.set(k - 1, b);
                mi = seg.prod(0, k);
            }
        }
        if (b == 0 && mi == 0) {
            cout << "Yes" << endl;
        } else {
            cout << "No" << endl;
        }
    }
}

提出情報

提出日時
問題 C - Brackets Stack Query
ユーザ tsuyosshi
言語 C++ 20 (gcc 12.2)
得点 300
コード長 2035 Byte
結果 AC
実行時間 957 ms
メモリ 26872 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 300 / 300
結果
AC × 1
AC × 18
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_small_00.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 03_corner_00.txt, 03_corner_01.txt, 03_corner_02.txt, 03_corner_03.txt, 03_corner_04.txt, 03_corner_05.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3612 KiB
01_small_00.txt AC 512 ms 15012 KiB
02_random_00.txt AC 904 ms 25956 KiB
02_random_01.txt AC 903 ms 25792 KiB
02_random_02.txt AC 907 ms 25868 KiB
02_random_03.txt AC 911 ms 25864 KiB
02_random_04.txt AC 905 ms 25852 KiB
02_random_05.txt AC 911 ms 25856 KiB
02_random_06.txt AC 901 ms 25860 KiB
02_random_07.txt AC 903 ms 25852 KiB
02_random_08.txt AC 898 ms 25792 KiB
02_random_09.txt AC 906 ms 25932 KiB
03_corner_00.txt AC 957 ms 26828 KiB
03_corner_01.txt AC 952 ms 26828 KiB
03_corner_02.txt AC 944 ms 26864 KiB
03_corner_03.txt AC 951 ms 26784 KiB
03_corner_04.txt AC 953 ms 26872 KiB
03_corner_05.txt AC 925 ms 26396 KiB