Submission #402556

# Submission time Handle Problem Language Result Execution time Memory
402556 2021-05-12T00:08:33 Z gevacrt Editor (BOI15_edi) C++17
100 / 100
492 ms 270420 KB
#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;

typedef vector<int> vi;
typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vi> vvi;
typedef vector<vii> vvii;

#define INF INT_MAX
#define MOD 1000000007
#define all(x) x.begin(), x.end()

struct PersTree {
    PersTree *l, *r;
    int key, val, max_val;

    PersTree(PersTree *_l, PersTree *_r, int _key, int _val, int _max_val) : 
        l(_l), r(_r), key(_key), val(_val), max_val(_max_val) {}

    PersTree *insert(int _key, int _val){
        PersTree *_l = l, *_r = r;
        int nval = val;

        if(_key < key) _l = _l->insert(_key, _val);
        else if(_key == key) nval = _val;
        else _r = _r->insert(_key, _val);

        return new PersTree(_l, _r, key, nval, max({(_l?_l->max_val:0), nval, (_r?_r->max_val:0)}));
    }

    int query(int _key){
        if(_key < key) return l->query(_key);
        else if(_key == key) return max((l?l->max_val:0), val);
        else return max({(l?l->max_val:0), val, r->query(_key)});
    }
};

PersTree *build(int left, int right){
    if(left > right) return NULL;
    int m = (left+right)/2;
    return new PersTree(build(left, m-1), build(m+1, right), m, 0, 0);
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);

    int N; cin >> N;

    vector<PersTree*> A(N+1);
    A[0] = build(0, N);
    vi ans(N+1);

    for(int i = 1; i <= N; i++){
        int x; cin >> x;
        if(x > 0){
            // write operation
            ans[i] = x;
            A[i] = A[i-1]->insert(0, i);

        }else{
            // undo operation
            int prv = A[i-1]->query(-x-1)-1;
            ans[i] = ans[prv];
            A[i] = A[prv]->insert(-x, i);
        }
        cout << ans[i] << "\n";
        A[1]->query(10);
    }

    return 0;
}
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 6 ms 3404 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 6 ms 3276 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 5 ms 3276 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 6 ms 3404 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 341 ms 267864 KB Output is correct
2 Correct 341 ms 267852 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 211 ms 128032 KB Output is correct
2 Correct 223 ms 154908 KB Output is correct
3 Correct 302 ms 207000 KB Output is correct
4 Correct 346 ms 267836 KB Output is correct
5 Correct 492 ms 270268 KB Output is correct
6 Correct 329 ms 265772 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1 ms 204 KB Output is correct
2 Correct 6 ms 3404 KB Output is correct
3 Correct 1 ms 204 KB Output is correct
4 Correct 1 ms 204 KB Output is correct
5 Correct 6 ms 3276 KB Output is correct
6 Correct 1 ms 204 KB Output is correct
7 Correct 5 ms 3276 KB Output is correct
8 Correct 1 ms 204 KB Output is correct
9 Correct 6 ms 3404 KB Output is correct
10 Correct 341 ms 267864 KB Output is correct
11 Correct 341 ms 267852 KB Output is correct
12 Correct 211 ms 128032 KB Output is correct
13 Correct 223 ms 154908 KB Output is correct
14 Correct 302 ms 207000 KB Output is correct
15 Correct 346 ms 267836 KB Output is correct
16 Correct 492 ms 270268 KB Output is correct
17 Correct 329 ms 265772 KB Output is correct
18 Correct 460 ms 270420 KB Output is correct
19 Correct 385 ms 270172 KB Output is correct
20 Correct 380 ms 263592 KB Output is correct
21 Correct 348 ms 268104 KB Output is correct
22 Correct 486 ms 270412 KB Output is correct