Cod sursa(job #346219)

Utilizator Bogdan_CCebere Bogdan Bogdan_C Data 7 septembrie 2009 11:18:56
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>
using namespace std;
int a[100001],m[100001],prev[100001],l=0,n,val,rec[100001];
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;
  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';int prev1=m[l];
 for(int i=1;i<=l;i++) {
         rec[i]=a[prev1];
         prev1=prev[prev1];
         
         }
 for(int i=l;i>=1;i--) out<<rec[i]<<" ";        

  
  return 0;  
    }