Submission #953935

#TimeUsernameProblemLanguageResultExecution timeMemory
953935AlphaMale06Global Warming (CEOI18_glo)C++17
0 / 100
31 ms8540 KiB
#include <bits/stdc++.h> using namespace std; #define pb push_back #define int long long #define F first #define S second const int N = 2e5+3; int dp[N], ndp[N]; pair<int, int> mdp[N]; signed main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, d; cin >> n >> d; int a[n]; for(int i=0; i< n; i++)cin >> a[i]; dp[0] = 2e9+1; int mx=0; for(int i = n-1; i>=0; i--){ if(a[i]<dp[mx]){ mx++; dp[mx]=a[i]; mdp[i] = {mx, a[i]}; continue; } int l = 1, r = mx; while(l<=r){ int s = l+r>>1; if(dp[s]>=a[i])l=s+1; else r=s-1; } dp[l]=min(dp[l], a[i]); mdp[i] = {l, dp[l]}; } int ans=mx; for(int i = 1; i<=n; i++)ndp[i]=1e9+i; ndp[0]=-1e9; int mxx=0; for(int i=0; i < n; i++){ int l = 0, r = n; if(a[i]-d>ndp[mxx]){ mxx++; ndp[mxx]=a[i]-d; } else{ while(l<=r){ int s = l+r>>1; if(ndp[s]>a[i]-d)r=s-1; else l=s+1; } ndp[l]=min(ndp[l], a[i]-d); } if(ndp[mx]<mdp[i+1].S)ans=max(ans, mdp[i+1].F+mx); } cout << ans << '\n'; }

Compilation message (stderr)

glo.cpp: In function 'int main()':
glo.cpp:33:22: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   33 |             int s = l+r>>1;
      |                     ~^~
glo.cpp:52:26: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   52 |                 int s = l+r>>1;
      |                         ~^~
#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...