Cod sursa(job #2267039)

Utilizator RazvanPanaiteRazvan Panaite RazvanPanaite Data 23 octombrie 2018 10:29:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
#define DMAX 100005

using namespace std;

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

int Sol[DMAX];
int best[DMAX];
int V[DMAX],poz[DMAX];
int n;

void citire();
void pd();

int main()
{citire();
 pd();
 return 0;
}
void citire()
{int i;
 fin>>n;
 for(i=1;i<=n;i++)
     fin>>V[i];
}
void pd()
{int i,pozi,lgmax=1;
 poz[1]=1;
 best[1]=V[1];
 for(i=2;i<=n;i++)
     if(V[i]>best[lgmax])
        {best[++lgmax]=V[i];
         poz[i]=lgmax;
        }
        else
        {pozi=lower_bound(best+1,best+1+lgmax,V[i])-best;
         best[pozi]=V[i];
         poz[i]=pozi;
        }
 fout<<lgmax<<'\n';
 int lg=lgmax;
 for(i=n;i>=1;i--)
     if(poz[i]==lgmax)
        {Sol[lgmax]=V[i];
         lgmax--;
        }
 for(i=1;i<=lg;i++)
     fout<<Sol[i]<<' ';
 fout<<'\n';
}