제출 #953937

#제출 시각아이디문제언어결과실행 시간메모리
953937AlphaMale06Global Warming (CEOI18_glo)C++17
0 / 100
34 ms6492 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]; 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] = {mx, dp[mx]}; } 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); } l = 0, r = n; while(l<=r){ int s = l+r>>1; if(ndp[s]<mdp[i+1].S)l=s+1; else r=s-1; } ans=max(ans, mdp[i+1].F+r); } cout << ans << '\n'; }

컴파일 시 표준 에러 (stderr) 메시지

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