Submission #882136

#TimeUsernameProblemLanguageResultExecution timeMemory
882136skywwlaGlobal Warming (CEOI18_glo)C++17
0 / 100
2090 ms73468 KiB
#include <bits/stdc++.h> using namespace std ; using ll = long long ; const int N = 2e5 + 5 ; int n , x , a[N], l[N], r[N] ; int findLIS() { vector<int> d ; for (int i = 1 ; i <= n ; i++) { auto it = upper_bound(d.begin(), d.end(), a[i]) ; if (it == d.end()) d.push_back(a[i]) ; else *it = a[i] ; } return d.size() ; } int32_t main() { ios::sync_with_stdio(false) ; cin.tie(nullptr) ; cin >> n >> x ; for (int i = 1 ; i <= n ; i++) { cin >> a[i] ; } for (int i = 1 ; i <= n ; i++) { l[i] = a[i] - x ; r[i] = a[i] + x ; } int ret = findLIS() ; if (!x) { cout << ret ; return 0 ; } vector<int> dp ; for (int i = 1 ; i <= n ; i++) { auto it = upper_bound(dp.begin(), dp.end(), a[i]) ; if (it == dp.end()) dp.push_back(a[i]) ; else *it = a[i] ; int mx = dp.size() ; deque<int> dp1 ; for (int j = n ; j > i ; j--) { auto it1 = upper_bound(dp1.begin(), dp1.end(), a[j]) ; if (it1 == dp1.begin()) dp1.push_front(a[j]) ; else { it1-- ; *it1 = a[j] ; } if (a[j] - 1 >= l[i] && a[j] - 1 <= r[i]) { cout << mx + dp1.size() << "\n" ; // cout << mx << ' ' << l[i] << ' ' << r[i] << ' ' << i << ' ' << dp1.size() << ' ' << j << "\n" ; ret = max(ret, mx + (int)dp1.size()) ; } } } cout << ret ; 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...