Pagini recente » Cod sursa (job #2329086) | Cod sursa (job #195437) | Clasament simulare-cartita-26 | Cod sursa (job #111321) | Cod sursa (job #2267386)
#include <iostream>
#include <fstream>
#define nmax 1000001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,v[nmax],subs[nmax],lg_sir,i,j,st,dr,mij,nr,indice[nmax];
bool c[nmax];
void afisare(int i)
{
int j;
if(i==2)
{
int ok=0;
ok=1;
}
for(j=i-1;j>=1;j--)
if(indice[j] == indice[i]-1 && indice[j] >= 1)
{
afisare(j);
break;
}
fout<<v[i]<<' ';
}
int main()
{
fin>>n;
fin>>v[1];
subs[1]=v[1];
lg_sir=1;
indice[1]=1;
for(i=2; i<=n; i++)
{
fin>>v[i];
st=1;
dr=lg_sir;
while(st <= dr)
{
mij=(st+dr)/2;
if(v[i]>subs[mij])
st=mij+1;
else
dr=mij-1;
}
if(subs[dr] == v[i])
continue;
subs[dr+1]=v[i];
indice[i]=dr+1;
if(dr+1 > lg_sir)
lg_sir++;
}
fout<<lg_sir<<'\n';
for(i=n;i>=1;i--)
if(indice[i] == lg_sir)
{
afisare(i);
break;
}
return 0;
}