Cod sursa(job #346215)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 7 septembrie 2009 11:09:54
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include<fstream>
using namespace std;
int a[100001],m[100001],prev[100001],l=0,n,val;
void caut(int st,int dr,int i)
{
     if(st<=dr)
 {int mij=(st+dr)/2;
          if(a[m[mij]]<a[i]) {val=mij;caut(mij+1,dr,i);}
          else  caut(st,mij-1,i);
          
          }
 
    }
int max(int a,int b)
{if(a<b) return b;
return a; }    
int main()
{ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
m[0]=0;l=0;
for(int j=1;j<=n;j++) in>>a[j];
for(int i=1;i<=n;i++)
 {int j=0;int st=0,dr=l;int gasit=0;
  /*while(gasit==0)
   {if(st<dr) {int mij=(st+dr)/2;
                  if(a[m[mij]]<a[i]) }
                 
                 }*/
  caut(0,l,i);j=val;
  prev[i]=m[j];
  if(a[i]<a[m[j+1]] || j==l) m[j+1]=i;
  l=max(l,j+1);
        
 
        }
 out<<l<<'\n';
 for(int i=1;i<=l;i++) out<<a[m[i]]<<" ";       

  
  return 0;  
    }