Submission #744566

#TimeUsernameProblemLanguageResultExecution timeMemory
744566ajab_01Global Warming (CEOI18_glo)C++17
10 / 100
69 ms13176 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int N = 2e5 + 5; const int INF = 1e9 + 1000; int arr[N] , dp[N] , las[N] , last[N] , g[N] , f[N] , ls[N] , ans , n , x; int32_t main(){ ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); fill(las , las + N , INF); fill(last , last + N , INF); fill(ls , ls + N , INF); cin >> n >> x; for(int i = 0 ; i < n ; i++) cin >> arr[i]; for(int i = 0 ; i < n ; i++){ int low = 0 , high = n; while(high - low > 1){ int mid = (high + low) >> 1; if(las[mid] < arr[i]) low = mid; else high = mid; } las[low + 1] = arr[i]; dp[i] = low + 1; int l = 0 , r = n; while(r - l > 1){ int mid = (r + l) >> 1; if(last[mid] < arr[i]) l = mid; else r = mid; } g[i] = l + 1; last[low + 1] = arr[i] - x; } for(int i = 0 ; i < n ; i++){ int low = 0 , high = n; while(high - low > 1){ int mid = (high + low) >> 1; if(ls[mid] < arr[i]) low = mid; else high = mid; } f[i] = low + 1; f[i] = max(f[i] , g[i]); ls[f[i]] = arr[i]; ans = max(ans , f[i]); } cout << ans << '\n'; 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...