Cod sursa(job #2553861)

Utilizator Iustin01Isciuc Iustin - Constantin Iustin01 Data 22 februarie 2020 12:36:22
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#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";
}