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<bits/stdc++.h>
using namespace std;
const int maxn=2e5+3,oo=2e9+3;
int a[maxn],n,x,subx[maxn],dpfor[maxn],dpback[maxn];
struct segtree
{
int st[maxn<<3];
void upd(int id,int l,int r,int p,int x)
{
if(l==r)
{
st[id]=max(st[id],x);
return;
}
int mid=(l+r)>>1;
if(p<=mid) upd(id<<1,l,mid,p,x);
else upd(id<<1|1,mid+1,r,p,x);
st[id]=max(st[id<<1],st[id<<1|1]);
}
void update(int p,int x)
{
upd(1,1,n<<1,p,x);
}
int gt(int id,int l,int r,int u,int v)
{
if(r<u||v<l) return 0;
if(u<=l&&r<=v) return st[id];
int mid=(l+r)>>1;
return max(gt(id<<1,l,mid,u,v),gt(id<<1|1,mid+1,r,u,v));
}
int get(int u,int v)
{
if(u>v) return 0;
return gt(1,1,n<<1,u,v);
}
}forw,backw,save;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>x;
vector<pair<int,int>> cmpress;
for(int i=1;i<=n;++i)
{
cin>>a[i];
subx[i]=a[i]-x;
cmpress.push_back({a[i],i});
cmpress.push_back({subx[i],i+maxn});
}
sort(cmpress.begin(),cmpress.end());
int currval=-oo,reval=0;
for(auto t:cmpress)
{
if(currval!=t.first)
{
++reval;
currval=t.first;
}
if(t.second>maxn) subx[t.second-maxn]=reval;
else a[t.second]=reval;
}
for(int i=1;i<=n;++i)
{
dpfor[i]=forw.get(1,a[i]-1)+1;
forw.update(a[i],dpfor[i]);
}
for(int i=n;i>0;--i)
{
dpback[i]=backw.get(a[i]+1,n<<1)+1;
backw.update(a[i],dpback[i]);
}
int ans=0;
for(int i=n;i>0;--i)
{
//cout<<i<<' '<<dpfor[i]<<' '<<save.get(subx[i]+1,n<<1)<<'\n';
ans=max(ans,dpfor[i]+save.get(subx[i]+1,n<<1));
save.update(a[i],dpback[i]);
}
cout<<ans;
return 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... |