Cod sursa(job #1071007)

Utilizator RamaStanciu Mara Rama Data 2 ianuarie 2014 14:26:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<stdio.h>
#include<iostream>
#include<fstream>

using namespace std;

int n, V[100003], sol[100003], A[100003], secv[100003], nr,sum_maxim;

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

void print(int i)
{
   if (A[i]>0)  print(A[i]);
   out<<V[i]<<" ";
}

int binary(int x)
{
   int st=0, dr=nr, mid=(st+dr)/2;
   while (st<=dr)
   {
      if (V[secv[mid]]<x &&  V[secv[mid+1]]>=x) return mid;
      else if (V[secv[mid+1]] < x)
        {
            st=mid+1;
            mid=(st+dr)/2;
            }
      else {
                dr=mid-1;
                mid=(st+dr)/2;
            }
   }
   return nr;
}

int main()
{
   int i,poz;
   nr = 1;

   in>>n;
   for (i=1;i<=n;i++)
        in>>V[i];
   sol[1] = secv[1] = 1;
   secv[0] =  0;

   for (i=2;i<=n;i++)
   {
      poz=binary(V[i]);
      A[i]=secv[poz];
      sol[i]=poz+1;
      secv[poz+1]=i;
      if(nr<poz+1) nr=poz+1;
   }
   sum_maxim = 0;
   poz = 0;
   for (i=1;i<=n;i++)
       if (sum_maxim<sol[i])
       {
          sum_maxim=sol[i];
          poz=i;
       }
   out<<sum_maxim<<"\n";
   print(poz);
   return 0;
}