Cod sursa(job #768461)

Utilizator ion824Ion Ureche ion824 Data 16 iulie 2012 22:03:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<fstream>
using namespace std;
int a[100005],p[100005],b[100005];

int main(void){
   ifstream fin("scmax.in");
   ofstream fout("scmax.out");   
   int N,i,st,dr,mid,vf=0,vfp=0;
   fin>>N;
   for(i=1;i<=N;++i)fin>>a[i]; 
   for(i=1;i<=N;++i)
     {
      st=0; dr=vf;
      while(dr-st>1){
              mid=(st+dr)>>1;
              if(b[mid]<a[i])st=mid;
                else dr=mid;                       
                     }
      if(b[st]>=a[i]){ b[st]=a[i]; p[++vfp]=st; }
        else
        if(b[dr]>=a[i]){ b[dr]=a[i]; p[++vfp]=dr; }
          else { b[++vf]=a[i]; p[++vfp]=vf; }                                   
     }
  st=0; fout<<vf<<'\n';  
  for(i=vfp;i>0;--i)
    if(p[i]==vf){ b[++st]=a[i]; --vf;        } 
  for(i=st;i>0;--i)fout<<b[i]<<' '; 
  return 0;  
}