Submission #66331993


Source Code Expand

#include <bits/stdc++.h>
typedef long long int ll;
typedef unsigned long long int ull;
const ll INF_LL = 0x3f3f3f3f3f3f3f3f, MOD = 998244353; //1e9+7
const int INF_INT = 0x3f3f3f3f;
const long double PI = acosl(-1.), EPS = 1e-9; 
using namespace std;

template<typename T, T (*op)(T, T), T (*nullel)()>
struct SegmentTree{
    vector<T> st;
    int n;
    SegmentTree(vector<T> &v){
        n = v.size();
        st.resize(2*n);
        build(v);
    }
    SegmentTree(ll sz){
        n = sz;
        st.resize(2*n);
    }
    void build(vector<T> &v){
        for(int i=n;i<2*n;i++) st[i] = v[i-n];
        for(int i=n-1;i>=1;i--) st[i] = op(st[2*i], st[2*i+1]); //merge op
    }
    T query(int l, int r){
        T ans = nullel();
        l += n, r += n;
        while(l <= r){
            int no = l, c = 1;
            while(!(no & 1) && (r-l+1) >= (c << 1)){
                c <<= 1;
                no >>= 1;
            }
            ans = op(ans, st[no]); //merge op
            l += c;
        }
        return ans;
    }
    void update(int l, T val){
        l += n;
        st[l] = val; //assign or increment?
        while(l > 1){
            l >>= 1;
            st[l] = op(st[2*l], st[2*l+1]); //merge op
        }
    }
};

int op(int a, int b){
    return max(a, b);
}

int el(){
    return 0;
}

//cout << fixed << setprecision(6)
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    //freopen("in", "r", stdin); //test input
    int n, d, r;
    cin >> n >> d >> r;
    SegmentTree<int, op, el> st(n+1);
    vector<pair<int, int>> vh;
    for(int i=1;i<=n;i++){
        int h;
        cin >> h;
        vh.push_back({h, i});
    }
    sort(vh.begin(), vh.end());
    set<tuple<int, int, int>> upd;
    int ans = 0;
    for(auto &[h, j] : vh){
        while(upd.size() && get<0>(*upd.begin()) <= h - d){
            st.update(get<1>(*upd.begin()), get<2>(*upd.begin()));
            upd.erase(upd.begin());
        }
        int qr = st.query(max(j - r, 1), min(j + r, n));
        ans = max(ans, qr + 1);
        upd.insert({h, j, qr + 1});
    }
    cout << ans-1 << "\n";
}

Submission Info

Submission Time
Task F - Athletic
User gabriel88766
Language C++ 20 (gcc 12.2)
Score 500
Code Size 2201 Byte
Status AC
Exec Time 223 ms
Memory 42052 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 2
AC × 39
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt
All 00_sample_00.txt, 00_sample_01.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3512 KiB
00_sample_01.txt AC 1 ms 3436 KiB
01_test_00.txt AC 1 ms 3548 KiB
01_test_01.txt AC 1 ms 3444 KiB
01_test_02.txt AC 1 ms 3416 KiB
01_test_03.txt AC 1 ms 3384 KiB
01_test_04.txt AC 1 ms 3540 KiB
01_test_05.txt AC 1 ms 3588 KiB
01_test_06.txt AC 104 ms 9236 KiB
01_test_07.txt AC 196 ms 11156 KiB
01_test_08.txt AC 47 ms 6284 KiB
01_test_09.txt AC 29 ms 4780 KiB
01_test_10.txt AC 50 ms 6308 KiB
01_test_11.txt AC 110 ms 10584 KiB
01_test_12.txt AC 54 ms 6536 KiB
01_test_13.txt AC 3 ms 3616 KiB
01_test_14.txt AC 38 ms 5040 KiB
01_test_15.txt AC 22 ms 4760 KiB
01_test_16.txt AC 121 ms 9680 KiB
01_test_17.txt AC 152 ms 10232 KiB
01_test_18.txt AC 203 ms 11092 KiB
01_test_19.txt AC 187 ms 11160 KiB
01_test_20.txt AC 167 ms 11224 KiB
01_test_21.txt AC 210 ms 11156 KiB
01_test_22.txt AC 184 ms 11100 KiB
01_test_23.txt AC 210 ms 11172 KiB
01_test_24.txt AC 146 ms 11216 KiB
01_test_25.txt AC 223 ms 42052 KiB
01_test_26.txt AC 222 ms 41956 KiB
01_test_27.txt AC 62 ms 11100 KiB
01_test_28.txt AC 60 ms 11160 KiB
01_test_29.txt AC 128 ms 11124 KiB
01_test_30.txt AC 137 ms 11100 KiB
01_test_31.txt AC 137 ms 11148 KiB
01_test_32.txt AC 126 ms 11100 KiB
01_test_33.txt AC 132 ms 11168 KiB
01_test_34.txt AC 132 ms 11128 KiB
01_test_35.txt AC 122 ms 11144 KiB
01_test_36.txt AC 1 ms 3624 KiB