Submission #478307

# Submission time Handle Problem Language Result Execution time Memory
478307 2021-10-07T00:19:08 Z khoabright Rainforest Jumps (APIO21_jumps) C++17
4 / 100
1296 ms 50524 KB
#include <bits/stdc++.h>
using namespace std;
 
#define ff first
#define ss second
#define pii pair<int, int>
#define all(x) x.begin(), x.end()
#define rep(i, a, b) for (int i = (int)a; i <= (int)b; ++i)
#define rep1(i, a, b) for (int i = (int)a; i >= (int)b; --i)
#define mp make_pair
 
const int N = 2e5 + 5;
const int k = 19;
 
int L[N][20], R[N][20], higher[N][20], h[N];
int my_size;
bool sub1 = 1;
 
void cal_LR() {
    rep(i, 1, my_size) if (h[i] != i) {
        sub1 = 0;
        break;
    }
    
    stack<int> st;
 
    rep(i, 1, my_size) {
        while (!st.empty() && h[st.top()] < h[i]) st.pop();
        if (!st.empty()) L[i][0] = st.top();
 
        st.push(i);
    }
 
    while (!st.empty()) st.pop();
 
    rep1(i, my_size, 1) {
        while (!st.empty() && h[st.top()] < h[i]) st.pop();
        if (!st.empty()) R[i][0] = st.top();
 
        st.push(i);
    }
 
    rep(i, 1, my_size) {
        if (h[L[i][0]] > h[R[i][0]]) higher[i][0] = L[i][0];
        else higher[i][0] = R[i][0];
        if (h[higher[i][0]] < h[i]) higher[i][0] = 0;
    }
 
    rep(u, 1, k) {
        rep(i, 1, my_size) {
            L[i][u] = L[L[i][u - 1]][u - 1];
            R[i][u] = R[R[i][u - 1]][u - 1];
            higher[i][u] = higher[higher[i][u - 1]][u - 1];
        }
    }
}
 
int minimum_jumps_sub1234(int a, int b, int c, int d) {
    if (sub1) return c - b;
    ++a, ++b, ++c, ++d;
    queue<pii> q;
    vector<bool> vst(my_size + 1);
    vst[0] = 1;
 
    rep(i, a, b) q.push({i, 0}), vst[i] = 1;
 
    while (!q.empty()) {
        auto [u, w] = q.front();
        q.pop();
        if (c <= u && u <= d) return w;
        int v = L[u][0];
        if (!vst[v]) {
            q.push({v, w + 1});
            vst[v] = 1;
        }
        v = R[u][0];
        if (!vst[v]) {
            q.push({v, w + 1});
            vst[v] = 1;
        }
    }
 
    return -1;
}
 
int minimum_jumps_sub5(int s, int t) {
    ++s, ++t;
 
    int ans = 0;
    // cout << "s,t="<<s<<' '<<t<<'\n';
    // cout << "H,L,R="<<higher[s][0] << ' ' << L[s][0] << ' ' << R[s][0] <<' '<<
    //' '<<higher[t][0]<<' '<<L[t][0]<<' '<<R[t][0]<< '\n';
    rep1(u, k, 0) {
        if (higher[s][u] != 0 && h[higher[s][u]] < h[t]) {
            //cout<<"u,higher="<<u<<' '<<higher[s][u]<<'\n';
            ans += (1 << u);
            s = higher[s][u];
        }
    }

    if (higher[s][0] != 0) {
        s = higher[s][0];
        ++ans;
    }
    //cout<<"s,ans="<<s<<' '<<ans<<'\n';
    if (s == t) {
        return ans;
    }

    if (s != t) {
        //cout << "s,ans,R0="<<s<<' '<<ans<<' '<<R[s][0]<<'\n';
        rep1(u, k, 0) {
            if (R[s][u] != 0 && h[R[s][u]] < h[t]) {
                ans += (1 << u);
                s = R[s][u];
            }
        }
    }
    if (R[s][0] != t) {
        return -1;
    }
    else return ans;
}
 
int minimum_jumps(int a, int b, int c, int d) {
    if (a == b && c == d) return minimum_jumps_sub5(a, c);
    else return minimum_jumps_sub1234(a, b, c, d);
}
 
void init(int sz, vector<int> array) {
    my_size = sz;
    rep(i, 1, my_size) h[i] = array[i - 1];   
    cal_LR();
}
 
//  int main() {
//     // ios_base::sync_with_stdio(0);
//     // cin.tie(0); cout.tie(0);

//     int x; cin >> x;
//     vector<int> array(x);
//     rep(i, 1, x) cin >> array[i - 1];
//     init(x,array);

//     //rep(i, 1, my_size) cout << L[i] << ' ' << R[i]<< '\n';

//     int q; cin >> q;
//     while (q--) {
//         // int l, r; cin >> l >> r;
//         // cout << get_max(l, r) << '\n';
//         int A, B, C, D;
//         cin >> A >> B >> C >> D;
//         cout << minimum_jumps(A,B,C,D) << '\n';
//     }
// }
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 137 ms 40212 KB Output is correct
4 Correct 1296 ms 50480 KB Output is correct
5 Correct 973 ms 25516 KB Output is correct
6 Correct 1014 ms 50496 KB Output is correct
7 Correct 796 ms 34500 KB Output is correct
8 Correct 1002 ms 50524 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 328 KB Output is correct
2 Correct 1 ms 328 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Incorrect 2 ms 328 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 328 KB Output is correct
2 Correct 1 ms 328 KB Output is correct
3 Correct 0 ms 200 KB Output is correct
4 Correct 1 ms 200 KB Output is correct
5 Incorrect 2 ms 328 KB Output isn't correct
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 1 ms 328 KB Output is correct
4 Correct 0 ms 200 KB Output is correct
5 Correct 96 ms 40000 KB Output is correct
6 Correct 124 ms 49564 KB Output is correct
7 Correct 58 ms 25540 KB Output is correct
8 Correct 122 ms 50440 KB Output is correct
9 Correct 15 ms 7740 KB Output is correct
10 Correct 116 ms 49616 KB Output is correct
11 Correct 104 ms 50336 KB Output is correct
12 Correct 114 ms 50112 KB Output is correct
13 Correct 112 ms 50188 KB Output is correct
14 Correct 116 ms 49700 KB Output is correct
15 Correct 128 ms 49932 KB Output is correct
16 Correct 126 ms 50344 KB Output is correct
17 Correct 130 ms 50244 KB Output is correct
18 Correct 0 ms 200 KB Output is correct
19 Correct 1 ms 328 KB Output is correct
20 Correct 1 ms 328 KB Output is correct
21 Correct 1 ms 328 KB Output is correct
22 Correct 1 ms 328 KB Output is correct
23 Correct 1 ms 328 KB Output is correct
24 Correct 1 ms 328 KB Output is correct
25 Correct 0 ms 328 KB Output is correct
26 Correct 1 ms 456 KB Output is correct
27 Correct 1 ms 712 KB Output is correct
28 Correct 1 ms 712 KB Output is correct
29 Correct 2 ms 712 KB Output is correct
30 Correct 1 ms 712 KB Output is correct
31 Correct 2 ms 712 KB Output is correct
32 Correct 0 ms 200 KB Output is correct
33 Correct 118 ms 49444 KB Output is correct
34 Correct 115 ms 49692 KB Output is correct
35 Correct 114 ms 50116 KB Output is correct
36 Correct 115 ms 49556 KB Output is correct
37 Correct 124 ms 49964 KB Output is correct
38 Correct 122 ms 50432 KB Output is correct
39 Correct 0 ms 200 KB Output is correct
40 Correct 61 ms 28796 KB Output is correct
41 Correct 115 ms 49572 KB Output is correct
42 Correct 111 ms 50240 KB Output is correct
43 Correct 120 ms 49580 KB Output is correct
44 Incorrect 132 ms 49932 KB Output isn't correct
45 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 328 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Incorrect 313 ms 22936 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 328 KB Output is correct
3 Correct 0 ms 328 KB Output is correct
4 Incorrect 313 ms 22936 KB Output isn't correct
5 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 0 ms 200 KB Output is correct
2 Correct 0 ms 200 KB Output is correct
3 Correct 137 ms 40212 KB Output is correct
4 Correct 1296 ms 50480 KB Output is correct
5 Correct 973 ms 25516 KB Output is correct
6 Correct 1014 ms 50496 KB Output is correct
7 Correct 796 ms 34500 KB Output is correct
8 Correct 1002 ms 50524 KB Output is correct
9 Correct 0 ms 328 KB Output is correct
10 Correct 1 ms 328 KB Output is correct
11 Correct 0 ms 200 KB Output is correct
12 Correct 1 ms 200 KB Output is correct
13 Incorrect 2 ms 328 KB Output isn't correct
14 Halted 0 ms 0 KB -