Submission #1127286

#TimeUsernameProblemLanguageResultExecution timeMemory
1127286KerimEditor (BOI15_edi)C++20
35 / 100
3094 ms14472 KiB
#include "bits/stdc++.h"
using namespace std;
set<pair<int,int> > s;
struct op {
    int poz;
    int wsk;
    bool aktyw;
    op(int edy) {
        if (edy < 0)
            poz = -edy;
        else
            wsk = edy, poz = 0;
        aktyw = false;
    }
};

vector<op> oper;

void add(int x){
    // cout<<"add "<<x<<" "<<oper[x].poz<<endl;
    s.insert({x, oper[x].poz});
    oper[x].aktyw = true;
}
void rem(int x){
    s.erase({x, oper[x].poz});
    oper[x].aktyw = false;
}

int get(int val){
    auto it = s.end();
    while (it != s.begin()){
        it--;
        if (it->second < val)
            return it->first;
    }
    return -1;
}

void dezaktywuj(int x) {
    int i = 0;
    while (1){
        if (i)
            add(x);
        else
            rem(x);
        if (oper[x].poz > 0)
            x = oper[x].wsk;
        else
            break;
        i ^= 1;
    }
}

void aktywuj(int x) {
    add(x);
    if (oper[x].poz > 0) {
        int i = get(oper[x].poz);
        oper[x].wsk = i;
        dezaktywuj(i);
    }
}

int n;

int main() {
    // freopen("file.in", "r", stdin);
    scanf("%d", &n);
    s.insert({-1, 0});
    for (int i = 0; i < n; ++i) {
        int edy;
        scanf("%d", &edy);
        oper.push_back(op(edy));
        aktywuj(i);
        int val = get(1);
        if (val < 0)
            val = 0;
        else
            val = oper[val].wsk;
        printf("%d\n", val);
    }
}

Compilation message (stderr)

edi.cpp: In function 'int main()':
edi.cpp:67:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   67 |     scanf("%d", &n);
      |     ~~~~~^~~~~~~~~~
edi.cpp:71:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |         scanf("%d", &edy);
      |         ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...