提出 #66336256


ソースコード 拡げる

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define all(a) a.begin(), a.end()
#define NUM1 998'244'353ll
#define NUM2 1'000'000'007ll
#define MOD NUM1
#define fi first
#define se second
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define sq(a_) ((a_) * (a_))
const ll INF = LLONG_MAX/7;
const ll MAX = 2'50'100ll;

template<typename T>
class segtree{
public:
    T id = -INF;
    ll n;
    vector<T> seg;

    T merge(T a, T b){
        return max(a, b);
    }

    segtree(vector<T>& a)
    {
        this->n = a.size();
        seg.resize(4*n);
        build(a, 0, 0, n - 1);
    }

    void build(vector<T>& a, ll v, ll l, ll r)
    {
        if(l == r){
            seg[v] = a[l];
            return;
        }
        ll m = (l + r)/2;
        build(a, 2*v + 1, l, m);
        build(a, 2*v + 2, m + 1, r);
        seg[v] = merge(seg[2*v + 1], seg[2*v + 2]);
    }

    void update(ll tl, ll tr, ll v, ll pos, T val)
    {
        if(tl == tr){
            seg[v] = val;
            return;
        }
        ll tm = (tl + tr)/2;
        if(pos <= tm) update(tl, tm, 2*v + 1, pos, val);
        else update(tm + 1, tr, 2*v + 2, pos, val);
        seg[v] = merge(seg[2*v + 1], seg[2*v + 2]);
    }

    T query(ll tl, ll tr, ll v, ll l, ll r)
    {
        if(l > r) return id;
        if(l == tl and r == tr) return seg[v];
        ll tm = (tl + tr)/2;
        return merge(query(tl, tm, 2*v + 1, l, min(r, tm)), query(tm + 1, tr, 2*v + 2, max(tm + 1, l), r));
    }

    void update(ll pos, T val)
    {
        update(0, n - 1, 0, pos, val);
    }

    T query(ll l, ll r){
        return query(0, n - 1, 0, l, r);    
    }
};

void solve()
{
    ll n, d, r;
    cin >> n >> d >> r;
    vector<ll> a(n);
    for(auto& x: a){
        cin >> x;
        --x;
    }
    vector<ll> pos(n);
    for(ll i = 0; i < n; i++) pos[a[i]] = i;
    vector<ll> actvals(n, 0);
    vector<ll> mvals(n, -INF);
    segtree<ll> seg(mvals);
    for(ll i = n - 1; i >= 0; i--){
        if(i + d < n){
            mvals[pos[i + d]] = actvals[pos[i + d]];
            seg.update(pos[i + d], mvals[pos[i + d]]);
        }
        ll lef = max(0ll, pos[i] - r), rig = min(n - 1, pos[i] + r);
        ll v = seg.query(lef, rig);
        if(v == -INF){
            actvals[pos[i]] = 0;
        }
        else{
            actvals[pos[i]] = 1 + v;
        }
    }
    // for(auto& x: actvals) cerr << x << ' ';
    // cerr << '\n';
    cout << *max_element(all(actvals)) << '\n';
}

signed main(void)
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    // fill(prods, prods + 600, mi(1));
    // fact[0] = 1;
    // for(ll i = 1; i < MAX; i++) fact[i] = i * fact[i - 1];
    // ifact[MAX - 1] = inv(fact[MAX - 1]);
    // for(ll i = MAX - 2; i >= 0; i--) ifact[i] = (i + 1) * ifact[i + 1];
    ll t = 1;
    // cin >> t;
    while(t--)
        solve();
    return 0;
}

提出情報

提出日時
問題 F - Athletic
ユーザ udow
言語 C++ 20 (gcc 12.2)
得点 500
コード長 3073 Byte
結果 AC
実行時間 241 ms
メモリ 34700 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 2
AC × 39
セット名 テストケース
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
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3516 KiB
00_sample_01.txt AC 1 ms 3580 KiB
01_test_00.txt AC 1 ms 3576 KiB
01_test_01.txt AC 1 ms 3628 KiB
01_test_02.txt AC 1 ms 3592 KiB
01_test_03.txt AC 1 ms 3484 KiB
01_test_04.txt AC 1 ms 3620 KiB
01_test_05.txt AC 1 ms 3768 KiB
01_test_06.txt AC 94 ms 19724 KiB
01_test_07.txt AC 241 ms 34004 KiB
01_test_08.txt AC 42 ms 11496 KiB
01_test_09.txt AC 37 ms 9268 KiB
01_test_10.txt AC 35 ms 12568 KiB
01_test_11.txt AC 173 ms 30576 KiB
01_test_12.txt AC 36 ms 14296 KiB
01_test_13.txt AC 3 ms 3816 KiB
01_test_14.txt AC 28 ms 10924 KiB
01_test_15.txt AC 29 ms 8112 KiB
01_test_16.txt AC 110 ms 22996 KiB
01_test_17.txt AC 153 ms 27920 KiB
01_test_18.txt AC 191 ms 34604 KiB
01_test_19.txt AC 240 ms 34516 KiB
01_test_20.txt AC 123 ms 34476 KiB
01_test_21.txt AC 228 ms 34504 KiB
01_test_22.txt AC 134 ms 34536 KiB
01_test_23.txt AC 232 ms 34508 KiB
01_test_24.txt AC 101 ms 34464 KiB
01_test_25.txt AC 41 ms 34528 KiB
01_test_26.txt AC 41 ms 34700 KiB
01_test_27.txt AC 121 ms 34536 KiB
01_test_28.txt AC 122 ms 34608 KiB
01_test_29.txt AC 71 ms 34532 KiB
01_test_30.txt AC 196 ms 34544 KiB
01_test_31.txt AC 171 ms 34476 KiB
01_test_32.txt AC 194 ms 34496 KiB
01_test_33.txt AC 196 ms 34604 KiB
01_test_34.txt AC 194 ms 34628 KiB
01_test_35.txt AC 192 ms 34600 KiB
01_test_36.txt AC 1 ms 3600 KiB