Pagini recente » Cod sursa (job #1426216) | Cod sursa (job #2191228) | Cod sursa (job #6756) | Cod sursa (job #2830081) | Cod sursa (job #1787287)
#include<fstream>
#include<iostream>
using namespace std;
#define MAX 100001
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int x[MAX],ant[MAX],l[MAX],n,lmax;
int caut(int e,int nrL)
{
int st=1,dr=nrL,m;
while(st<=dr)
{
m=(st+dr)/2;
if(x[l[m]]==e)
return m;
if(x[l[m]]>e)
dr=m-1;
else
st=m+1;
}
return st;
}
void refacere(int k)
{
if(ant[k]!=0)
refacere(ant[k]);
fout<<x[k]<<" ";
}
int main()
{
int i,poz,nrL=0;
fin>>n;
for(i=1; i<=n; i++)
fin>>x[i];
for(i=1;i<=n;i++)
{
poz=caut(x[i],nrL);
if(poz>nrL)
{
nrL++;
l[nrL]=i;
}
else
{
l[poz]=i;
}
ant[i]=l[poz-1];
}
fout<<nrL<<"\n";
refacere(l[nrL]);}