Cod sursa(job #2282637)

Utilizator I_am_not_a_robotMr Domino I_am_not_a_robot Data 14 noiembrie 2018 10:53:40
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

const int N=100000+5;

int n;
int v[N];
int ans=0;
int mi[N]; /// store the id
int dad[N];

int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>v[i];
        if(ans==0 || v[i]>v[mi[ans]])
        {
            mi[++ans]=i;
            dad[i]=mi[ans-1];
            continue;
        }
        int lo=1;
        int hi=ans;
        int sol=0;
        while(lo<=hi)
        {
            int mid=(lo+hi)/2;
            if(v[i]>v[mi[mid]])
            {
                hi=mid-1;
            }
            else
            {
                sol=mid;
                lo=mid+1;
            }
        }
        mi[sol]=i;
        dad[i]=mi[sol-1];
    }
    fout<<ans<<"\n";
    vector<int>lol;
    int now=mi[ans];
    while(now)
    {
        lol.push_back(v[now]);
        now=dad[now];
    }
    reverse(lol.begin(),lol.end());
    for(auto &x:lol)
    {
        fout<<x<<" ";
    }
    fout<<"\n";
    return 0;
}