Submission #161210

#TimeUsernameProblemLanguageResultExecution timeMemory
161210rama_pangGlobal Warming (CEOI18_glo)C++14
42 / 100
73 ms11344 KiB
#include <bits/stdc++.h> using namespace std; using lint = long long; const lint INF = 1e15; lint N, X; lint A[200005]; lint lis[200005]; lint lds[200005]; pair<lint, lint> anslis[200005]; pair<lint, lint> anslds[200005]; lint LIS() { for (int i = 0; i <= N; i++) lis[i] = INF, lds[i] = -INF; lis[0] = -INF, lds[N] = INF; lint res = 0; for (lint i = 0, cur = 0; i < N; i++) { lint 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] = {j, lis[j]}; } for (lint i = N - 1, cur = N - 1; i >= 0; i--) { lint 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); anslds[i] = {cur, lds[cur]}; } for (lint i = 0; i <= N; i++) { if (lis[i] < INF) res = max(res, i); } for (lint 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]; lint 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...