Cod sursa(job #2387929)

Utilizator FunnyStockyMihnea Andreescu FunnyStocky Data 25 martie 2019 14:32:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.6 kb
#include <fstream>

using namespace std;

ifstream cin("scmax.in");
ofstream cout("scmax.out");

const int N=100000+7;
int n;
int v[N];
int id[N],y;
int t[N];
int res[N];

int main()
{
        cin>>n;
        for(int i=1;i<=n;i++)
        {
                cin>>v[i];
        }
        for(int i=1;i<=n;i++)
        {
                if(i==1 || v[id[y]]<v[i])
                {
                        y++;
                        id[y]=i;
                        t[i]=id[y-1];
                }
                else
                {
                        int lo=1;
                        int hi=y;
                        int res=1;
                        while(lo<=hi)
                        {
                                int mid=(lo+hi)>>1;
                                if(v[id[mid]]<v[i])
                                {
                                        lo=mid+1;
                                }
                                else
                                {
                                        res=mid;
                                        hi=mid-1;
                                }
                        }
                        t[i]=id[res-1];
                        id[res]=i;
                }
        }
        cout<<y<<"\n";
        int cur=id[y];
        for(int i=y;i>=1;i--,cur=t[cur])
        {
                res[i]=cur;
        }
        for(int i=1;i<=y;i++)
        {
                cout<<v[res[i]]<<" ";
        }
        cout<<"\n";
        return 0;
}
/**


1

3

4

6

1 3 5 6

4 5 1

**/