Cod sursa(job #2607585)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 29 aprilie 2020 21:41:43
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define lll long long
#define fi first
#define rest se.fi
#define suma se.se
#define sir first
#define se second

using namespace std;

const lll NR = 2e5 + 10 , oo = 2e9 + 100  ;



void boost ()    {
    #ifndef ONLINE_JUDGE
    freopen("scmax.in", "r", stdin);
    freopen("scmax.out", "w", stdout);
    #endif
     ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
}

int dp [ NR ] , n , maxind , pos [ NR ] ;

int main()  {
    int i , j , x , y , jj , st , dr , mij , sol ;
    boost() ;
    cin >> n ;
    dp [ 0 ] = 0 ;

    for ( i = 1 ; i <= n ; ++ i  )
        dp [ i ] = oo ;
    for ( i = 1 ; i <= n ; ++ i )   {
        cin >> x ;
        st = 1 ; dr = n ; sol = 0 ;
        while ( st <= dr )  {
            mij = ( st + dr ) >> 1 ;
            if ( dp [ mij ] < x )   {
                sol = mij ;
                st = mij + 1 ;
            }   else    {
                dr = mij - 1 ;
            }
        }
        dp [ sol + 1 ] = min ( dp [ sol + 1 ] , x ) ;
        maxind = max ( maxind , sol + 1 ) ;
    }
        cout << maxind << '\n' ;

    for ( i = 1 ; i <= maxind ; ++ i )   {
        cout << dp [ i ] << ' ' ;
    }
    return 0;
}