Pagini recente » Cod sursa (job #553097) | Cod sursa (job #1634333) | Cod sursa (job #1281910) | Cod sursa (job #1983179) | Cod sursa (job #2553861)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
struct ex{
int val, pre = -1, best = 1;
}v[100001];
int n, maxim = 1, p;
void dinamic(){
p = n;
for(int i = n - 1; i >= 1; i--)
for(int j = i + 1; j <= n; j++){
if(v[i].val < v[j].val && v[i].best <= v[j].best + 1){
if(v[i].pre == -1){
v[i].best = v[j].best + 1;
v[i].pre = j;
if(maxim < v[i].best) maxim = v[i].best, p = i;
}
else
if(v[v[i].pre].val > v[j].val){
v[i].best = v[j].best + 1;
v[i].pre = j;
if(maxim < v[i].best) maxim = v[i].best, p = i;
}
}
}
}
void constructie(){
int i = p;
while(i != -1){
out<<v[i].val<<" ";
i = v[i].pre;
}
}
int main(){
in>>n;
for(int i = 1; i <= n; i++)
in>>v[i].val;
dinamic();
out<<maxim<<"\n";
constructie();
out<<"\n";
}