이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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... |