제출 #1265226

#제출 시각아이디문제언어결과실행 시간메모리
1265226MongHwaGlobal Warming (CEOI18_glo)C++20
10 / 100
44 ms4408 KiB
#pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #include <iostream> #include <vector> using namespace std; int arr[200005], brr[200005]; int dp[200005], dp2[200005]; void lds(int n) { vector<int> lds; for(int i = n-1; i >= 0; i--) { int k = lower_bound(lds.begin(), lds.end(), brr[i]) - lds.begin(); if(k == (int)lds.size()) lds.push_back(brr[i]); else lds[k] = brr[i]; dp[i] = k+1; } } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, x; cin >> n >> x; for(int i = 0; i < n; i++) { cin >> arr[i]; brr[i] = -arr[i]; } lds(n); int ans = 0; vector<int> lis; for(int i = 0; i < n; i++) { int k = lower_bound(lis.begin(), lis.end(), arr[i]) - lis.begin(); if(k == (int)lis.size()) { ans = max(ans, k+dp[i]); lis.push_back(arr[i]); } else { int k2 = lower_bound(lis.begin(), lis.end(), arr[i]+x) - lis.begin(); ans = max(ans, k2+dp[i]); lis[k] = arr[i]; } dp2[i] = k; } lis.clear(); for(int i = n-1; i >= 0; i--) { int k = lower_bound(lis.begin(), lis.end(), brr[i]) - lis.begin(); if(k == (int)lis.size()) { ans = max(ans, k+dp[i]); lis.push_back(brr[i]); } else { int k2 = lower_bound(lis.begin(), lis.end(), brr[i]+x) - lis.begin(); ans = max(ans, k2+dp2[i]); lis[k] = arr[i]; } } 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...