제출 #1222790

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

using namespace std;

const int nmax = 2e5;

int n, x;
int v[nmax + 5];

int dp_st[nmax + 5], dp_dr[nmax + 5];

struct arbore_indexat_binar
{
    int aib[nmax + 5];

    int ub(int x)
    {
        return (x & (-x));
    }

    void update(int poz, int val)
    {
        for(int i=poz;i<=2*n;i+=ub(i))
        {
            aib[i] = max(aib[i], val);
        }
    }

    int query(int poz)
    {
        int rez = 0;
        for(int i=poz;i>=1;i-=ub(i))
        {
            rez = max(rez, aib[i]);
        }
        return rez;
    }

}aib_st, aib_dr, aib;

vector<int> a;

int get_val(int val)
{
    int st = 1;
    int dr = a.size();
    int poz = 0;
    while(st <= dr)
    {
        int mij = (st + dr) >> 1;
        if(a[mij - 1] <= val)
        {
            poz = mij;
            st = mij + 1;
        }
        else
        {
            dr = mij - 1;
        }
    }
    return poz;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    #ifdef home
    freopen("nr.in","r",stdin);
    freopen("nr.out","w",stdout);
    #endif // home
    cin>>n>>x;
    for(int i=1;i<=n;i++)
    {
        cin>>v[i];
        a.push_back(v[i]);
        a.push_back(-v[i]);
    }
    sort(a.begin(), a.end());
    for(int i=1;i<=n;i++)
    {
        dp_st[i] = 1 + aib_st.query(get_val(v[i] - 1));
        aib_st.update(get_val(v[i]), dp_st[i]);
    }
    for(int i=n;i>=1;i--)
    {
        dp_dr[i] = 1 + aib_dr.query(get_val(-v[i] - 1));
        aib_dr.update(get_val(-v[i]), dp_dr[i]);
    }
    int rez = 1;
    for(int i=1;i<=n;i++)
    {
        rez = max(rez, dp_dr[i] + aib.query(get_val(v[i] + x - 1)));
        aib.update(get_val(v[i]), dp_st[i]);
    }
    cout<<rez<<'\n';
    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...