제출 #515744

#제출 시각아이디문제언어결과실행 시간메모리
515744andrei_boacaGlobal Warming (CEOI18_glo)C++17
100 / 100
126 ms8104 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll n,x,v[200005],ans,dp[200005],maxim[200005],minim[200005],pref[200005]; ll getLIS() { ll rez=0; for(int i=1;i<=n;i++) maxim[i]=-3e9; for(int i=n;i>=1;i--) { int lg=0; int st=1; int dr=n-i; while(st<=dr) { int mij=(st+dr)/2; if(maxim[mij]>v[i]) { lg=mij; st=mij+1; } else dr=mij-1; } dp[i]=lg+1; rez=max(rez,dp[i]); maxim[dp[i]]=max(maxim[dp[i]],v[i]); } return rez; } void getprefLIS() { ll rez=0; for(int i=1;i<=n;i++) minim[i]=3e9; for(int i=1;i<=n;i++) { ll lg=0; ll st=1; ll dr=i-1; while(st<=dr) { ll mij=(st+dr)/2; if(minim[mij]<v[i]) { lg=mij; st=mij+1; } else dr=mij-1; } pref[i]=lg+1; minim[pref[i]]=min(minim[pref[i]],v[i]); } } int main() { cin>>n>>x; for(int i=1;i<=n;i++) cin>>v[i]; ans=getLIS(); getprefLIS(); for(ll i=1;i<=n;i++) maxim[i]=-3e9; for(int i=n;i>=1;i--) { ll val=pref[i]; ll lg=0; ll st=1; ll dr=n-i; while(st<=dr) { ll mij=(st+dr)/2; if(maxim[mij]>v[i]-x) { lg=mij; st=mij+1; } else dr=mij-1; } ans=max(ans,val+lg); maxim[dp[i]]=max(maxim[dp[i]],v[i]); } cout<<ans; return 0; }

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

glo.cpp: In function 'void getprefLIS()':
glo.cpp:35:8: warning: unused variable 'rez' [-Wunused-variable]
   35 |     ll rez=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...