Cod sursa(job #485379)

Utilizator PopaStefanPopa Stefan PopaStefan Data 18 septembrie 2010 11:00:13
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include<fstream>
#define nmax 100001
#define infinit 2000000

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int n,a[nmax],s1[nmax],s2[nmax],b[nmax];

void citire()
{fin>>n;
for(int i=1;i<=n;i++)
  fin>>a[i];
}

void solve()
{int i,j;
int lg=0,min=infinit,poz;
for(i=1;i<=n;i++)
  {min=infinit;
   for(j=1;j<=lg;j++)
     if(s1[j]>a[i] && s1[j]<min)
       {min=s1[j];
        poz=j;
       }
   if(min==infinit && s1[lg]!=a[i])
      {lg++;
       s1[lg]=a[i];
       s2[i]=lg;
      }
     else
       {s1[poz]=a[i];
        s2[i]=poz;
       }
  }
int l=1;
fout<<lg<<'\n';
for(i=n;i>=1 && lg>=1;i--)
  if(s2[i]==lg)
     {b[l]=a[i];l++;
      lg--;
     }
l--;
for(i=l;i>=1;i--)
 fout<<b[i]<<" ";
}

int main()
{citire();
solve();
return 0;
}