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;
int a,b,c,d,e,i,j,ii,jj,zx,xc,f[1000009],dp[1000009],g[1000009],fen[1000009],L[1000009];
map <int, int> m;
map <int, int>::iterator it;
void upd(int q, int w){
q=1000004-q;
while(q<=1000005){
fen[q]=min(fen[q],w);
q=q+(q&(-q));
}
}
int read(int q){
q=1000004-q;
int sm=1000009;
while(q>=1){
sm=min(sm,fen[q]);
q=q-(q&(-q));
}
return sm;
}
void upd2(int q, int w){
while(q<=1000005){
fen[q]=max(fen[q],w);
q=q+(q&(-q));
}
}
int read2(int q){
int sm=0;
while(q>=1){
sm=max(sm,fen[q]);
q=q-(q&(-q));
}
return sm;
}
int main(){
ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>a;
for(i=1; i<=a; i++) cin>>f[i];
for(i=0; i<=1000007; i++){
fen[i]=1000009;
}
for(i=1; i<=a; i++){
g[i]=read(f[i]+1);
g[i]=min(g[i],1000001);
upd(f[i],f[i]);
}
L[1]=1;
for(i=2; i<=a; i++){
if(f[i]<f[i-1]){
L[i]=i;
}else{
L[i]=L[i-1];
}
}
for(i=0; i<=1000007; i++){
fen[i]=0;
}
for(i=1; i<=a; i++){
c=read2(f[i]-1);
c=max(c+1,L[i]);
dp[i]=dp[c-1]+1;
upd2(g[i],i);
}
cout<<dp[a];
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... |