Cod sursa(job #1646775)

Utilizator ionut98Bejenariu Ionut Daniel ionut98 Data 10 martie 2016 17:41:45
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100005],b[100005],fin[100005];
int n,mij,st,dr,k,i,j,poz;
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
      {
          int st=1;
          int dr=k;
          int poz=k;
          while(st<=dr)
          {
              int 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;
}