제출 #709865

#제출 시각아이디문제언어결과실행 시간메모리
709865MinaRagy06Global Warming (CEOI18_glo)C++17
100 / 100
480 ms67688 KiB
#include <bits/stdc++.h>
using namespace std;
#define lesgooo ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define endl    '\n'
#define md      ((l + r) >> 1)

int seg[8'000'005], L[8'000'005], R[8'000'005], cur = 3;
int newnode()
{
    return cur++;
}
void upd(int i, int l, int r, int x, int v)
{
    if (x == l && r == x) return void (seg[i] = v);
    if (r < x || x < l) return ;
    if (x <= md)
    {
        if (!L[i]) L[i] = newnode();
        upd(L[i], l, md, x, v);
    }
    else
    {
        if (!R[i]) R[i] = newnode();
        upd(R[i], md + 1, r, x, v);
    }
    seg[i] = max(seg[L[i]], seg[R[i]]);
}
int get(int i, int l, int r, int s, int e)
{
    if (r < s || e < l || i == 0) return 0;
    if (s <= l && r <= e) return seg[i];
    return max(get(L[i], l, md, s, e), get(R[i], md + 1, r, s, e));
}
signed main()
{
    lesgooo;
    int n, x;
    cin >> n >> x;
    int a[n];
    for (int i = 0; i < n; i++) cin >> a[i];
    int dp[n][2]{};
    for (int i = n-1; i >= 0; i--) for (int j = 0; j < 2; j++)
    {
        // for (int k = i + 1; k < n; k++) if (a[k] >= a[i]+1) dp[i][j] = max(dp[i][j], dp[k][j]);
        // if (!j) for (int k = i + 1; k < n; k++) if (a[i]+1-x <= a[k] && a[k] <= a[i]+1+x) dp[i][j] = max(dp[i][j], dp[k][1]);
        dp[i][j] = get(j+1, 0, 1e9, a[i]+1, 1e9);
        if (!j) dp[i][j] = max(dp[i][j], get(2, 0, 1e9, a[i]+1-x, a[i]+1+x));
        dp[i][j]++;
        upd(j+1, 0, 1e9, a[i], dp[i][j]);
    }
    int mx = 0;
    for (int i = 0; i < n; i++) mx = max(mx, dp[i][0]);
    cout << mx;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...