Submission #161208

#TimeUsernameProblemLanguageResultExecution timeMemory
161208rama_pangGlobal Warming (CEOI18_glo)C++14
62 / 100
68 ms5924 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1e9 + 7; int N, X; int A[200005]; int lis[200005]; int lds[200005]; pair<int, int> anslis[200005]; pair<int, int> anslds[200005]; int LIS() { for (int i = 0; i <= N; i++) lis[i] = INF, lds[i] = -INF; lis[0] = -INF, lds[N] = INF; int res = 0; for (int i = 0, cur = 0; i < N; i++) { int j = upper_bound(lis, lis + N + 1, A[i] - X) - lis; if (lis[j - 1] < A[i] - X && A[i] - X < lis[j]) lis[j] = A[i] - X, cur = max(cur, j); anslis[i] = {cur, lis[cur]}; } for (int i = N - 1, cur = N - 1; i >= 0; i--) { int j = lower_bound(lds, lds + N + 1, A[i]) - lds; if (j >= 1 && lds[j - 1] < A[i] && A[i] < lds[j]) lds[j - 1] = A[i], cur = min(cur, j - 1); if (j >= 2 && lds[j - 2] < A[i] && A[i] < lds[j - 1]) lds[j - 2] = A[i], cur = min(cur, j - 2); anslds[i] = {cur, lds[cur]}; } for (int i = 0; i <= N; i++) { if (lis[i] < INF) res = max(res, i); } for (int i = 0; i + 1 < N; i++) { if (anslis[i].second < anslds[i + 1].second) res = max(res, anslis[i].first + N - anslds[i + 1].first); } return res; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> N >> X; for (int i = 0; i < N; i++) cin >> A[i]; int ans = LIS(); cout << ans << "\n"; }
#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...