Submission #785608

#TimeUsernameProblemLanguageResultExecution timeMemory
785608christinelynnGlobal Warming (CEOI18_glo)C++17
5 / 100
61 ms3872 KiB
#include <bits/stdc++.h>
using namespace std;
 
#define v          vector
#define int        long long
#define all(a)     (a).begin(), (a).end()
#define pb         push_back
#define mk         make_pair
#define pii        pair<int, int>
#define ff         first
#define ss         second
#define inp_v(vec) for (auto &i : vec) cin >> i;
#define prt_v(vec) for (auto i : vec) cout << i << endl;
#define MS(x)     memset(x, 0, sizeof(x))
#define gcd(a,b)   __gcd(a, b);
#define lcm(a,b)   (a*(b/gcd(a,b)))
bool chmin(int &a, int b){return b<a?a=b, true:false;}
bool chmax(int &a, int b){return b>a?a=b, true:false;}
const int maxn=2e5+5;
int N, x;
int ans=1;

void cek(vector<int>A2){
    int dpp[N+1];
    for(int i=1;i<=N;i++){
        dpp[i]=1;
    }
    for(int i=2;i<=N;i++){
        for(int j=i-1;j>=1;j--){
            if(A2[i]>A2[j])dpp[i]=max(dpp[i], dpp[j]+1);
        }
        ans=max(ans, dpp[i]);
    }
    return;
}
signed main(){
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin>>N>>x;
    vector<int>A(N+1), dp(N+1);
    for(int i=1;i<=N;i++)cin>>A[i];
    if(!x){
        multiset<pair<int, int>>st;
        dp[N]=1;
        st.insert({A[N], 1});
        int ans=1;
        for(int i=N-1;i>=1;i--){
            auto it=st.upper_bound({A[i], 0});
            if(it==st.end())dp[i]=1;
            else{
                dp[i]=(*it).second+1;
                // it--;
            }     
            // if(i==6){
            //     for(auto p:st)cout<<p.first<<" "<<p.second<<" ";
            //     cout<<endl;
            // }
            auto lb=st.lower_bound({A[i], 0});
            if((*lb).first!=A[i])lb=prev(lb);
            if(!st.empty()&&lb!=st.end()){
                    bool tem=false;
                while(((dp[i])>=(*lb).second)&&lb!=st.begin()){
                    // cout<<i<<" "<<(*(lb)).first<<" "<<(*(lb)).second<<endl;
                    if(lb==st.begin())tem=false;
                    auto simp=lb;
                    lb=prev(lb);
                    st.erase(simp);
                    if(lb==st.begin()){
                        if(dp[i]>=(*lb).second)st.erase(lb);
                        // cout<<"break "<<i<<" "<<(*(lb)).first<<" "<<(*(lb)).second<<endl;
                        break;
                    }
                }
            }
            ans=max(ans, dp[i]);
            st.insert({A[i], dp[i]});
            // cout<<i<<" "<<dp[i]<<endl;
        }
        cout<<ans<<endl;
    }
    else if(N<=50){
        for(int i=1;i<=N;i++){
            for(int k=-x;k<=x;k++){
                auto temp=A;
                for(int j=i;j<=N;j++){
                    temp[j]+=k;
                    // for(auto isi:temp)cout<<isi<<" ";
                    // cout<<endl;
                    cek(temp);
                }
            }
        }
        cout<<ans<<endl;
        
    }
    return 0;
}

Compilation message (stderr)

glo.cpp: In function 'int main()':
glo.cpp:60:26: warning: variable 'tem' set but not used [-Wunused-but-set-variable]
   60 |                     bool tem=false;
      |                          ^~~
#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...