제출 #1229593

#제출 시각아이디문제언어결과실행 시간메모리
1229593chikien2009Global Warming (CEOI18_glo)C++20
100 / 100
168 ms5916 KiB
#include <bits/stdc++.h>

using namespace std;

void setup()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

struct SEGMENT_TREE
{
    int tree[800000];
    
    inline void Clear()
    {
        fill_n(tree, 8e5, 0);
    }
    inline void Set(int ind, int l, int r, int x, int v)
    {
        if (r < x || x < l)
        {
            return;
        }
        if (l == r)
        {
            tree[ind] = max(tree[ind], v);
            return;
        }
        int m = (l + r) >> 1;
        Set(ind << 1, l, m, x, v);
        Set(ind << 1 | 1, m + 1, r, x, v);
        tree[ind] = max(tree[ind << 1], tree[ind << 1 | 1]);
    }
    inline int GetVal(int ind, int l, int r, int x, int y)
    {
        if (r < x || y < l || y < x)
        {
            return 0;
        }
        if (x <= l && r <= y)
        {
            return tree[ind];
        }
        int m = (l + r) >> 1;
        return max(GetVal(ind << 1, l, m, x, y), GetVal(ind << 1 | 1, m + 1, r, x, y));
    }
} st;

int n, m, x, a[200002], b[200002], res, c, f[200002];

int main()
{
    setup();

    cin >> n >> x;
    for (int i = 1; i <= n; ++i)
    {
        cin >> a[i];
        b[i - 1] = a[i];
    }
    sort(b, b + n);
    m = unique(b, b + n) - b;
    for (int i = 1; i <= n; ++i)
    {
        a[i] = lower_bound(b, b + m, a[i]) - b + 1;
    }
    for (int i = 1; i <= n; ++i)
    {
        f[i] = st.GetVal(1, 1, 2e5, 1, a[i] - 1) + 1;
        res = max(res, f[i]);
        st.Set(1, 1, 2e5, a[i], f[i]);
    }
    st.Clear();
    for (int i = n; i >= 1; --i)
    {
        c = b[a[i] - 1] - x + 1;
        c = lower_bound(b, b + m, c) - b + 1;
        res = max(res, f[i] + st.GetVal(1, 1, 2e5, c, 2e5));
        st.Set(1, 1, 2e5, a[i], st.GetVal(1, 1, 2e5, a[i] + 1, 2e5) + 1);
    }
    cout << res;
    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...