Cod sursa(job #2414328)

Utilizator liviu2000Dragomirescu Liviu liviu2000 Data 24 aprilie 2019 14:53:00
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
#define N 100005

using namespace std;

ifstream fin("scmax.in") ;
ofstream fout("scmax.out") ;

vector<pair<int,int> > graf[N] ;
int t[N] ;

int main()
{
    int n , i , j , mx ;
    fin >> n ;
    for ( i = 1 ; i <= n ; i++ )
        fin >> t[i] ;
    t[0] = 0 ;
    graf[0].push_back(make_pair(0,0)) ;
    graf[1].push_back(make_pair(t[1],1)) ;
    mx = 1 ;
    for ( i = 2 ; i <= n ; i++ )
    {
        for ( j = mx ; j >= 0 ; j-- )
        {
            if ( graf[j][0].first < t[i] && graf[j][0].second < i )
            {
                graf[j+1].push_back(make_pair(t[i],i)) ;
                if ( j == mx )
                    mx++ ;
                if ( graf[j+1][0].first > t[i] )
                    swap(graf[j+1][0],graf[j+1][graf[j+1].size()-1]) ;
                break ;
            }
        }
    }
    fout << mx << '\n' ;
    for ( i = 1 ; i <= mx ; i++ )
        fout << graf[i][0].first << " " ;
}