제출 #1167104

#제출 시각아이디문제언어결과실행 시간메모리
1167104CiprianGlobal Warming (CEOI18_glo)C++20
10 / 100
33 ms8328 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n, x; int mx(vector<int>a, int l, int r){ vector<int>dp; for(int i=1; i<=n; i++){ if(i>=l && i<=r){ int pos=lower_bound(dp.begin(),dp.end(), a[i]+x)-dp.begin(); if(pos==dp.size()){ dp.push_back(a[i]+x); }else{ dp[pos]=a[i]+x; } }else{ int pos=lower_bound(dp.begin(),dp.end(), a[i])-dp.begin(); if(pos==dp.size()){ dp.push_back(a[i]); }else{ dp[pos]=a[i]; } } }return dp.size(); } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cin>>n>>x; vector<int> a(n+1), mn1(n+2, 1e9), max1(n+1); int mx2=0; for(int i=1; i<=n; i++){ cin>>a[i]; max1[i]=max(max1[i-1],a[i]); }for(int i=n; i>=1; i--){ mn1[i]=min(mn1[i+1],a[i]); } int mx1=0; x=min(x, max1[n]); mx1= max(mx1, mx(a, 0, 0)); //cout<<mx1<<endl; int idx=n; for(int i=2; i<=n; i++){ if(max1[i-1]<mn1[i]+x){ idx=i; //cout<<i<<endl; }else break; //mx1= max(mx1, mx(a, i, i)); //mx1= max(mx1, mx(a, 1, i)); //mx1= max(mx1, mx(a, i, n)); //cout<<i<<" "<<mx(a, 1, i)<<" "<<mx(a, i, n)<<endl; }//cout<<idx<<endl; mx1=max(mx1,mx(a,idx, n)); cout<<mx1<<endl; 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...