Cod sursa(job #1199554)

Utilizator DjokValeriu Motroi Djok Data 19 iunie 2014 17:16:55
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include<fstream>
#include<algorithm>
#define INF 0x3f3f3f3f
using namespace std;

int a[100005],b[100005],rs[100005],i,j,nr,v,n;

int search(int x) {
   int st,dr,pivot;
   st=1; dr=v; 
   while(st<=dr) 
   {
     pivot=(st+dr)/2;
     if(x<=b[pivot]) dr=pivot-1;
     else st=pivot+1;            
   }
 return st;  
}

int main()
{
  ifstream cin("scmax.in");
  ofstream cout("scmax.out"); 
  
  cin>>n; 
  for(i=1;i<=n;i++) cin>>a[i];
  
  b[1]=a[1]; v=1; 
  for(i=2;i<=n;i++)
  {
    j=search(a[i]);
    b[j]=a[i]; rs[i]=j;
    v=max(v,j);              
  }
  
  nr=v;
  for(i=n;i>=1;i--) if(rs[i]==nr) a[nr--]=b[nr];
  
  cout<<v<<'\n';
  for(i=1;i<=v;i++) cout<<a[i]<<' ';
  
 return 0;   
}