Cod sursa(job #2252133)

Utilizator PeraPera Alexandru Pera Data 2 octombrie 2018 13:06:35
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>

using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int v[100001], a[100001];
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 n,K,t,i,k,sol,tata[100001],l[100001],S[100001],poz;
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[k]=i;
        l[i]=k;
        tata[i]=a[k-1];
    }

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

    return 0;
}