Submission #795758

#TimeUsernameProblemLanguageResultExecution timeMemory
795758ArshiGlobal Warming (CEOI18_glo)C++17
100 / 100
54 ms5388 KiB
/**********************GOD**********************/ #include <iostream> #include <algorithm> #include <cmath> #include <iomanip> #include <cstdlib> #include <string> #include <vector> #include <set> #include <queue> #include <stack> #include <iterator> #include <map> using namespace std; typedef long long ll; typedef long double ld; typedef pair<ll , ll> pll; #define len length() #define MP make_pair #define fs first #define sc second #define pb(x) push_back(x) #define all(x) x.begin() , x.end() #define kill(x) cout << x , exit(0) const ll INF = 2e9 + 8; const ll MOD = 1e9 + 7; const ll MXN = 2e5 + 6; const ll LOG = 28 - 5; int n , k , mx , ans; int A[MXN] , B[MXN]; int dp[MXN] , pd[MXN]; void lis() { fill(pd , pd + MXN , INF); pd[0] = 0; for(int i = 1 ; i <= n ; i ++) { int j = lower_bound(pd , pd + MXN , B[i]) - pd; dp[n + 1 - i] = j; pd[j] = min(pd[j] , B[i]); } } void sil() { fill(pd , pd + MXN , INF); pd[0] = 0; for(int i = 1 ; i <= n ; i ++) { int j = lower_bound(pd , pd + MXN , A[i] + k) - pd; ans = max(ans , j + dp[i] - 1); j = lower_bound(pd , pd + MXN , A[i]) - pd; pd[j] = min(pd[j] , A[i]); } } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> k; for(int i = 1 ; i <= n ; i ++) { cin >> A[i]; mx = max(A[i] , mx); } for(int i = 1 ; i <= n ; i ++) B[i] = (- A[n + 1 - i]) + mx + 1; lis(); sil(); cout << ans << '\n'; return 0; } /*! ahkh */
#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...