Submission #232213

#TimeUsernameProblemLanguageResultExecution timeMemory
232213nicolaalexandraGlobal Warming (CEOI18_glo)C++14
62 / 100
154 ms3064 KiB
#include <bits/stdc++.h>
#define DIM 200010
using namespace std;
int v[DIM],d[DIM];
pair <int,int> dp_left[DIM],dp_right[DIM];
int n,i,x,k,sol;
int main (){

    //ifstream cin ("date.in");
    //ofstream cout ("date.out");

    cin>>n>>x;
    for (i=1;i<=n;i++)
        cin>>v[i];

    d[1] = n, k = 1;
    dp_right[n] = make_pair(v[n],1);
    for (i=n-1;i;i--){
        int st = 1, dr = k;
        while (st <= dr){
            int mid = (st+dr)>>1;
            if (v[d[mid]] > v[i])
                st = mid+1;
            else dr = mid-1;
        }

        if (st == k+1)
            k++;
        d[st] = i;

        dp_right[i] = make_pair(v[d[k]],k);
    }

    /// modific un sufix

    k = 0;
    for (i=1;i<=n;i++){
        int st = 1, dr = k;
        while (st <= dr){
            int mid = (st+dr)>>1;
            if (v[d[mid]] < v[i])
                st = mid+1;
            else dr = mid-1;
        }

        if (st == k+1)
            k++;
        d[st] = i;

        if (i < n){

            int val = dp_right[i+1].first + x;
            /// vreau sa gasesc cea mai mare valoare mai mica decat asta
            int st = 1, dr = k, poz = 0;
            while (st <= dr){
                int mid = (st+dr)>>1;
                if (v[d[mid]] < val){
                    poz = mid;
                    st = mid+1;
                } else dr = mid-1;
            }

            sol = max (sol,dp_right[i+1].second + poz);

        }
    }
    sol = max (sol,k);

    cout<<sol;

    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...