Cod sursa(job #2252143)

Utilizator PeraPera Alexandru Pera Data 2 octombrie 2018 13:18:21
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[100001], a[100001];
int n,K,t,i,k,sol,tata[100001],l[100001],S[100001],poz;
int binara(int x, int k){
    int st=1; int dr=k; int sol=0;
    while(st<=dr){
          int mid=(st+dr)/2;
          if(v[a[mid]]>=v[x]){
             sol=mid;
             dr=mid-1;
          }
          else
             st=mid+1;
    }
    if(sol==0)
         return k+1;
   return sol;
}

int main()
{
    poz=0;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    k=0;
    for(i=1;i<=n;i++){
        sol=binara(i,k);
        k=max(k,sol);
        a[sol]=i;
        l[i]=sol;
        tata[i]=a[sol-1];
    }

    cout<<k<<"\n";
    for(i=1;i<=n;i++)
        if(l[i]==k){
           poz=i;
           break;
        }
    K=k;
    while(k>0){
          S[k]=v[poz];
          poz=tata[poz];
          k--;
    }
   for(i=1;i<=K;i++)
       cout<<S[i]<<" ";

    return 0;
}