Submission #417973

# Submission time Handle Problem Language Result Execution time Memory
417973 2021-06-04T17:36:45 Z ACmachine The Potion of Great Power (CEOI20_potion) C++17
56 / 100
3000 ms 76424 KB
#include <bits/stdc++.h>
using namespace std;
#define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l))
#define FORD(i, j, k, l) for(int i = (j); i >= (k); i -= (l))
#define REP(i, n) FOR(i, 0, n, 1)
#define REPD(i, n) FOR(i, n, 0, 1)
#define pb push_back
#define ff first
#define ss second
vector<int> h;
const int INF = (int)2e9 + 15;
struct segtree{
    vector<vector<array<int, 2>>> tree;
    int n;
    segtree(){}
    segtree(int sz){
        n = 1;
        while(n < sz) n *= 2;
        tree.resize(2 * n);
    }
    void upd(int l, int r, array<int, 2> val){upd0(l, r, 0, n, 1, val);}
    void upd0(int l, int r, int beg, int end, int v, array<int, 2> val){
        if(beg >= l && end <= r){
            tree[v].pb(val);
            return;
        }
        if(beg >= r || end <= l) 
            return;
        int mid = (beg + end) >> 1;
        upd0(l, r, beg, mid, v << 1, val);
        upd0(l, r, mid, end, v << 1 | 1, val); 
    }
    void query0(int pos, int beg, int end, int v, vector<int> &res, int val){
        if(beg > pos || end <= pos)
            return;
        array<int, 2> ts = {val, -INF};
        int id = lower_bound(tree[v].begin(), tree[v].end(), ts) - tree[v].begin();
        FOR(i, id, tree[v].size(), 1){
            if(tree[v][i][0] != val) 
                break;
            res.pb(h[tree[v][i][1]]);
        }
        if(beg == pos && end == pos + 1) 
            return;
        int mid = (beg + end) >> 1;
        
        query0(pos, beg, mid, v << 1, res, val); 
        query0(pos, mid, end, v << 1 | 1, res, val);
    }
};
segtree st;
int n;

void init(int N, int d, int H[]) {
    n = N;
    REP(i, N) 
        h.pb(H[i]);
}

void curseChanges(int U, int A[], int B[]) {
    st = segtree(U + 5);
    map<array<int, 2>, int> edges;
    FOR(i, 1, U + 1, 1){
        array<int, 2> tm = {A[i - 1], B[i - 1]};
        if(tm[0] > tm[1]) swap(tm[0], tm[1]);
        if(edges.find(tm) != edges.end()){
            st.upd(edges[tm], i, tm);
            edges.erase(tm);
        }
        else{
            edges[tm] = i;
        }
    }
    for(auto x : edges){
        auto tm = x.ff;
        st.upd(x.ss, U + 1, tm); 
    }
    REP(i, st.tree.size()){
        int up = st.tree[i].size();
        REP(j, up){
            auto x = st.tree[i][j];
            swap(x[0], x[1]);
            st.tree[i].pb(x);
        }
        sort(st.tree[i].begin(), st.tree[i].end());
    }
}

int question(int x, int y, int v) {
    vector<int> f;
    vector<int> s;
    st.query0(v, 0, st.n, 1, f, x);
    st.query0(v, 0, st.n, 1, s, y);
    if(f.empty() || s.empty()){
        return (int)1e9;
    } 
    sort(f.begin(), f.end());
    sort(s.begin(), s.end());
    int ans = (int)1e9 + 5;
    for(int x : f){
        int id = lower_bound(s.begin(), s.end(), x) - s.begin();
        if(id > 0){
            ans = min(ans, abs(x - s[id - 1]));
        }
        if(id < (int)s.size()){
            ans = min(ans, abs(x - s[id]));
        }
    }
    return ans;
}

Compilation message

potion.cpp: In member function 'void segtree::query0(int, int, int, int, std::vector<int>&, int)':
potion.cpp:3:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::array<int, 2> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l))
      |                                            ^
potion.cpp:38:9: note: in expansion of macro 'FOR'
   38 |         FOR(i, id, tree[v].size(), 1){
      |         ^~~
potion.cpp: In function 'void curseChanges(int, int*, int*)':
potion.cpp:3:44: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<std::array<int, 2> > >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    3 | #define FOR(i, j, k, l) for(int i = (j); i < (k); i += (l))
      |                                            ^
potion.cpp:5:19: note: in expansion of macro 'FOR'
    5 | #define REP(i, n) FOR(i, 0, n, 1)
      |                   ^~~
potion.cpp:78:5: note: in expansion of macro 'REP'
   78 |     REP(i, st.tree.size()){
      |     ^~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 632 KB Output is correct
2 Correct 6 ms 584 KB Output is correct
3 Correct 4 ms 584 KB Output is correct
4 Correct 19 ms 1336 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 1006 ms 76240 KB Output is correct
2 Correct 991 ms 76424 KB Output is correct
3 Correct 409 ms 37984 KB Output is correct
4 Correct 2016 ms 65020 KB Output is correct
5 Correct 1207 ms 75608 KB Output is correct
6 Execution timed out 3029 ms 58980 KB Time limit exceeded
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 1241 ms 76344 KB Output is correct
2 Correct 1459 ms 42240 KB Output is correct
3 Correct 1465 ms 58796 KB Output is correct
4 Correct 1888 ms 58900 KB Output is correct
5 Correct 1378 ms 76040 KB Output is correct
6 Correct 1981 ms 58980 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 141 ms 3836 KB Output is correct
2 Correct 179 ms 2488 KB Output is correct
3 Correct 192 ms 1988 KB Output is correct
4 Correct 904 ms 3368 KB Output is correct
5 Correct 876 ms 3708 KB Output is correct
6 Correct 216 ms 3768 KB Output is correct
7 Correct 712 ms 2656 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 5 ms 632 KB Output is correct
3 Correct 6 ms 584 KB Output is correct
4 Correct 4 ms 584 KB Output is correct
5 Correct 19 ms 1336 KB Output is correct
6 Correct 1006 ms 76240 KB Output is correct
7 Correct 991 ms 76424 KB Output is correct
8 Correct 409 ms 37984 KB Output is correct
9 Correct 2016 ms 65020 KB Output is correct
10 Correct 1207 ms 75608 KB Output is correct
11 Execution timed out 3029 ms 58980 KB Time limit exceeded
12 Halted 0 ms 0 KB -