Pagini recente » Cod sursa (job #1778125) | Cod sursa (job #2783966) | Cod sursa (job #3259489) | Cod sursa (job #1913168) | Cod sursa (job #2438216)
#include <bits/stdc++.h>
#define MAXN int(5e3)
using namespace std;
int N;
int sir[MAXN+1];
int dp[MAXN+1][2];
int sol[MAXN+1];
ofstream fout("subsir2.out");
void read(){
ifstream fin("subsir2.in");
fin>>N;
for(int i=1; i<=N; i++)
fin>>sir[i];
}
int main()
{
read();
sir[0] = -1e6 - 1;
for(int i=1; i<=N; i++){
for(int j=i-1; j>=0; j--){
if(sir[i] > sir[j]){
dp[i][0] = 1 + dp[j][0];
dp[j][1] = -1;
break;
}
}
}
for(int i=1; i<N; i++){
for(int j=i+1; j<N+1; j++)
if(sir[i]<=sir[j]){
dp[i][1] = -1;
break;
}
}
int min_len = MAXN+1, pos;
for(int i=1; i<=N; i++) {
if(dp[i][1]==0){
if(min_len > dp[i][0]){
min_len = dp[i][0];
pos = i;
}
else if(min_len == dp[i][0] && sir[pos] > dp[i][0]){
pos = i;
}
}
}
fout<<min_len<<endl;
min_len--;
int k=1;
sol[1] = sir[pos];
while(min_len){
for(int i=pos-1; i>0; i--){
if(dp[i][0]==min_len){
if(sir[pos]>sir[i]){
pos = i;
}
}
}
sol[++k] = sir[pos];
min_len--;
}
for(; k>0; k--) fout<<sol[k]<<" ";
}