Submission #1226165

#TimeUsernameProblemLanguageResultExecution timeMemory
1226165slivajanHomework (CEOI22_homework)C++20
23 / 100
267 ms41524 KiB
#include <bits/stdc++.h>
using namespace std;

using un = long long;
using vuc = vector<un>;
using vol = vector<bool>;

#define REP(i, a, b) for (un i = (un)a; i < (un)b; i++)
#define FEAC(i, a) for (auto i : a)
#define vec vector
#define ALL(x) (x).begin(), (x).end()

#define MAX 0
#define MIN 1

tuple<un, un, un> leaf = {0, 0, 1};

struct Node {
    bool isReady = false;
    tuple<un, un, un> levy;

    bool typ;

    Node(bool t) : typ(t) {}

    void setLeft(tuple<un, un, un> l){
        levy = l;
        isReady = true;
    }

    tuple<un, un, un> eval(tuple<un, un, un> pravy){
        auto [X1, X2, N] = levy;
        auto [Y1, Y2, M] = pravy;

        un K = N+M;

        un A, B;

        if (typ == MIN){
            A = min(X1, Y1);
            B = X2 + Y2;
        }
        else if (typ == MAX){
            un X3 = N-X2-1;
            un Y3 = M-Y2-1;
            A = K - (N-X1-1) - (M-Y1-1) - 1;
            B = K - min(N-X2-1, M-Y1-1) - 1;
        }

        return {A, B, K};
    }



};


int main(){

    stack<Node> zasoba;

    tuple<un, un, un> ret;

    do {
        char c, trash;


        cin >> c;
        while((c == ')') or (c == ',')) cin >> c;

        if (c == '?') {
            tuple<un, un, un> curr = leaf;
            while((not zasoba.empty()) and (zasoba.top().isReady)){
                curr = zasoba.top().eval(curr); zasoba.pop();
            }

            if (zasoba.empty()) ret = curr;
            else {
                zasoba.top().setLeft(curr);
            }
        }
        else if (c == 'm'){
            cin >> c >> trash >> trash;

            if (c == 'a') zasoba.emplace(MAX);
            else zasoba.emplace(MIN);
        }
    } while (not zasoba.empty());

    auto [X, Y, ignore] = ret;
    cout << (Y-X) + 1 << endl;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...