Cod sursa(job #2562175)

Utilizator AndreiDeltaBalanici Andrei Daniel AndreiDelta Data 29 februarie 2020 12:38:11
Problema Subsir crescator maximal Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define Dim 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int N,A[Dim],Q[Dim],P[Dim],lg,cnt,L[Dim],kop;

multiset < int > S;
multiset < int > ::iterator it,copie;

int main()
{
    f>>N;
    for(int i=1;i<=N;i++) f>>A[i];

    S.insert(A[1]);
    P[++cnt]=1;
    for(int i=2;i<=N;i++)
    {
        int x=A[i];
        it=S.upper_bound(x);


        if( it == S.end() && x > *(--it) )
        {
            P[++cnt]=S.size()+1;
            S.insert(x);
        }
        else
        {
            P[++cnt]=distance(S.begin(),it)+1;
            S.erase(it);
            S.insert(x);
        }
    }
    g<<S.size()<<'\n';
    lg=S.size();
    for(int i=cnt;i>=1 && lg > 0 ;i--)
    {
        if(P[i]==lg)
        {
            lg--;
            L[++kop]=i;
        }
    }

    for(int i=kop;i>=1;i--)
    g<<A[L[i]]<<' ';

    return 0;
}