Pagini recente » Cod sursa (job #524140) | Cod sursa (job #1465203) | Cod sursa (job #671730) | Cod sursa (job #1725861) | Cod sursa (job #1968929)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax=100000+5;
int a[Nmax],b[Nmax],n,len,poz[Nmax],par[Nmax];
int caut_bin(int x)
{
int hi=len,lo=-1,mid;
while(hi-lo>1)
{
mid=lo+(hi-lo)/2;
if(b[mid]>=x)hi=mid;
else lo=mid;
}
if(b[hi]<x)return hi+1;
else return lo+1;
}
void print_sol(int lent,int prev)
{
if(lent>1)
print_sol(lent-1,par[prev]);
fout<<a[prev]<<" ";
}
int main()
{
int k;
fin>>n;
for(int i = 1 ;i <= n ; ++i)fin>>a[i];
for(int i = 1,p;i <= n; ++i)
{
p=caut_bin(a[i]);
b[p]=a[i];
if(p>len)len++;
poz[p]=i;
if(p>0)par[i]=poz[p-1];
}
fout<<len<<'\n';
print_sol(len,poz[len]);
return 0;
}