제출 #1275435

#제출 시각아이디문제언어결과실행 시간메모리
1275435ezrapoGlobal Warming (CEOI18_glo)C++20
100 / 100
262 ms28768 KiB

#include <bits/stdc++.h>
using namespace std;
#define int long long
struct Segtree {
    int n;
    vector<int> st;
    Segtree(int _n) {
        n=_n;
        st.resize(4*n+5);
    }
    int _query(int node, int l, int r, int ql, int qr) {
        if (r<ql || l>qr) return 0;
        if (ql<=l && r<=qr) return st[node];
        int mid=(l+r)/2;
        return max(_query(node*2+1, l, mid, ql, qr), _query(node*2+2, mid+1, r, ql, qr));
    }
    void _update(int node, int l, int r, int pos, int val) {
        if (l==r) {st[node]=max(st[node], val); return;}
        int mid=(l+r)/2;
        if (pos<=mid) _update(node*2+1, l, mid, pos, val);
        else _update(node*2+2, mid+1, r, pos, val);
        st[node]=max(st[node*2+1], st[node*2+2]);
    }
    
    int query(int l, int r) {return _query(0, 0, n-1, l, r);}
    void update(int pos, int val) {_update(0, 0, n-1, pos, val);}
};
int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int n, x; cin >> n >> x;
    vector<int> a(n+1), ax(n+1);
    {
        vector<int> b;
        for (int i=1; i<=n; i++) cin >> a[i], ax[i] = a[i]-x;
        for (int i=1; i<=n; i++) b.push_back(a[i]), b.push_back(ax[i]);
        b.push_back(-1e18);
        sort(b.begin(), b.end());
        b.erase(unique(b.begin(), b.end()), b.end());
        for (int i=1; i<=n; i++) a[i]=lower_bound(b.begin(), b.end(), a[i])-b.begin()+1;
        for (int i=1; i<=n; i++) ax[i]=lower_bound(b.begin(), b.end(), ax[i])-b.begin()+1;
    }
    Segtree dp0(2*n+10);
    Segtree dp1(2*n+10);
    for (int i=1; i<=n; i++) {
        dp0.update(a[i], max(dp0.query(0, a[i]-1)+1, dp1.query(0, a[i]-1)+1));
        dp1.update(ax[i], dp1.query(0, ax[i]-1)+1);
    }
    
    
    
    
    cout << dp0.st[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...