Cod sursa(job #3183783)

Utilizator myrra678ana ana myrra678 Data 13 decembrie 2023 11:05:05
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define N 100002
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");

 
int v[N];
int poz[N];
int q[N];

void afisare(int n, int l)
{  int i;
  for( i = n; i >= 1; i--)
  {
    if (poz[i] == l) break; 
  }
  
  if (l>1) afisare(i-1, l-1); 
  out<<v[i]<<' ';
}
 
int main()
{
    int n; in >> n;
    for (int i = 1; i <= n; i++)
    in >> v[i];
    int l=1;
    q[1]=v[1]; poz[1]=1;
    for(int i=2; i<=n; i++){
      // q[1]<=       q[st]  |  q[dr].......q[l]
      //       < v[i]              >=v[i]
    if(v[i]>q[l])
    {
      l++;
      q[l]=v[i];
      poz[i]=l;
    } 
    else
    { // v[i] < q[l]
         int st = 0 , dr = l;
          while(st < dr - 1)
           {
            int m = (st + dr) / 2;
            if(v[i] <= q[m])
                dr = m;
            else
              st = m;
        
           }
        q[dr]=v[i];
        poz[i]=dr;
  
    }  
      
    
  }
    
    out<<l<<endl;
    afisare( n, l);
    
    
    return 0;
}