This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
const int N=2e5+100;
int n,x;
long long dp[N],val[N],cpy[N];
pair<int,long long> revert[N];
void GTA6()
{
for(int i=0;i<=n;i++)
{
val[i]=-3e9;
dp[i]=3e9;
}
val[0]=3e9;
dp[0]=-3e9;
for(int i=n-1;i>=0;i--)
{
cpy[i]=-cpy[i];
int xc=lower_bound(dp,dp+n+1,cpy[i])-dp;
revert[i]={xc,val[xc]};
val[xc]=max(-cpy[i],val[xc]);
dp[xc]=cpy[i];
cpy[i]=-cpy[i];
}
}
int main()
{
cin.tie(NULL);
cout.tie(NULL);
ios::sync_with_stdio(false);
cin>>n>>x;
for(int i=0;i<n;i++)
cin>>cpy[i];
int ans=0;
int final=0;
GTA6();
for(int i=0;i<=n;i++)
dp[i]=3e9;
dp[0]=-3e9;
int _1_=0;
for(int i=0;i<n;i++)
{
cpy[i]-=x;
int xc=lower_bound(dp,dp+n+1,cpy[i])-dp;
dp[xc]=cpy[i];
val[revert[i].first]=revert[i].second;
int s=0;
int e=n+1;
while(s+1<e)
{
int mid=(s+e)/2;
if(val[mid]>(cpy[i]))
s=mid;
else
e=mid;
}
final=max(final,xc+s);
}
cout<<final<<'\n';
return 0;
}
Compilation message (stderr)
glo.cpp: In function 'int main()':
glo.cpp:37:6: warning: unused variable 'ans' [-Wunused-variable]
37 | int ans=0;
| ^~~
glo.cpp:43:6: warning: unused variable '_1_' [-Wunused-variable]
43 | int _1_=0;
| ^~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |