#include <bits/stdc++.h>
using namespace std;
const int N=400;
int dp[N];
int a[N],valid[N],nxt[N];
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int n;
cin>>n;
set<int> vis={1000000000};
nxt[0]=1e9;
for(int i=1;i<=n;i++)
{
cin>>a[i];
auto it=vis.upper_bound(a[i]);
nxt[i]=*it;
vis.insert(a[i]);
valid[i]=i-1;
if(a[i-1]<=a[i])
{
valid[i]=valid[i-1];
}
}
dp[0]=0;
for(int i=1;i<=n;i++)
{
dp[i]=i;
// dp[i]= min(dp[ip]) valid[i]-1<=ip and not element in prefix ip is in the range [a[ip+1],a[i]]
// dp[i] = min(dp[ip]) valid[i]-1<=ip and nxt[ip]>=a[i]
for(int ip=i-1;ip>=valid[i];ip--)
{
if(nxt[ip]>=a[i])
{
dp[i]=min(dp[i],dp[ip]+1);
}
}
}
cout<<dp[n]<<endl;
}
| # | 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... |