Cod sursa(job #2409072)

Utilizator DimaTCDima Trubca DimaTC Data 18 aprilie 2019 17:27:07
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.65 kb
#include<bits/stdc++.h>
#define N 100030

using namespace std;

int a[N],t[N],p[N];
int n,k;

ofstream fout("scmax.out");

void rec(int x) {
    if (x==0) return;
    rec(p[x]);
    fout<<a[x]<<" ";
}

int main() {
    ifstream cin("scmax.in");

    cin>>n;
    for (int i=1; i<=n; ++i) cin>>a[i];

    t[1]=1; k=1;
    for (int i=2; i<=n; ++i) {
        int st=1,dr=k;
        while (st<=dr) {
            int mid=(st+dr)>>1;
            if (a[t[mid]]<a[i]) st=mid+1;
            else dr=mid-1;
        }
        if (st==k+1) ++k;
        t[st]=i;
        p[i]=t[st-1];
    }
    fout<<k<<'\n';
    rec(t[k]);

    return 0;
}