Pagini recente » Cod sursa (job #1555204) | Cod sursa (job #824889) | Cod sursa (job #1019376) | Cod sursa (job #2529622) | Cod sursa (job #1339020)
#include <fstream>
#define IN "scmax.in"
#define OUT "scmax.out"
#define DMAX 100005
using namespace std;
ifstream fin (IN);
ofstream fout (OUT);
int A[DMAX], Best[DMAX], poz[DMAX];
int n, nr;
void citire()
{
int i;
fin>>n;
for (i=1; i<=n; i++)
fin>>A[i];
}
int cautare_binara(int x, int dim)
{
int dr=dim+1, st=0, mij;
while (dr-st>1)
{
mij=(st+dr)/2;
if (Best[mij]>=x) dr=mij;
else st=mij;
}
if (dr>dim) return 0;
return dr;
}
void Dinamica()
{
int i, aux;
nr=1;
Best[1]=A[1]; poz[1]=1;
for (i=2; i<=n; i++)
{
if (A[i] < Best[nr]) ///cautare binara
{
Best[cautare_binara(A[i], nr)]=A[i];
poz[i]=cautare_binara(A[i], nr);
}
else
{
nr++;
Best[nr]=A[i];
poz[i]=nr;
}
}
}
void afisare()
{
int i, maxim;
maxim=poz[1];
for (i=2; i<=n; i++)
if (maxim<poz[i])
maxim=poz[i];
fout<<maxim<<'\n';
for (i=1; i<=maxim; i++)
fout<<Best[i]<<" ";
}
int main()
{
citire();
Dinamica();
afisare();
return 0;
}