Cod sursa(job #2212573)

Utilizator vladth11Vlad Haivas vladth11 Data 14 iunie 2018 14:03:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int minim[100005],rez[100005],v[100005];
void solve(int poz){
    if(poz == 0)
        return;
    solve(rez[poz]);
    cout << v[poz] << " ";
}
int main()
{
    int n,m = 0,i,r,pas;
    cin >> n;
    for(i = 1;i <= n;i++){
        cin >> v[i];
    }
    for(i = 1;i <= n;i++){
        r = 0;
        pas = 1 << 16;
        while(pas){
            if(r+pas <= m && v[i] > v[minim[r+pas]]){
                r+=pas;
            }
            pas/=2;
        }
        if(r == m)
            m++;
        minim[r+1] = i;
        rez[i] = minim[r];
    }
    cout << m << "\n";
    solve(minim[m]);
    return 0;
}