Cod sursa(job #1856651)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 25 ianuarie 2017 11:31:50
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,j,a[100001];
int fin[100001],k,st,dr,mij,poz;
int b[100001];
int main()
{
    f>>n;
    for(i=1;i<=n;i++)
      f>>a[i];
    for(i=1;i<=n;i++)
      if(a[i]>fin[k])
      {
          k++;
          fin[k]=a[i];
          b[i]=k;
      }
      else
      {
          st=1;
          dr=k;
          poz=k;
          while(st<=dr)
          {
              mij=(st+dr)/2;
              if(fin[mij]>=a[i])
              {
                  dr=mij-1;
                  poz=mij;
              }
              else
                st=mij+1;
          }
          fin[poz]=a[i];
          b[i]=poz;
      }
    j=k;
    k=0;
    for(i=n;i>=1&&j>0;i--)
      if(b[i]==j)
      {
          k++;
          fin[k]=a[i];
          j--;
      }
    g<<k<<"\n";
    for(i=k;i>=1;i--)
      g<<fin[i]<<" ";
    return 0;
}