Pagini recente » Cod sursa (job #1525596) | Cod sursa (job #2267754) | Cod sursa (job #96817) | Cod sursa (job #1374554) | Cod sursa (job #1967958)
#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,ind[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;
}
int main()
{
fin>>n;
for(int i = 1 ;i <= n ; ++i)fin>>a[i];
b[1]=a[1];ind[1]=1;len=1;
for(int i = 2,poz;i <= n; ++i)
{
poz=caut_bin(a[i]);
if(poz==-1 || poz==0)
{
if(b[1]>a[i])
{
b[1]=a[i];
ind[1]=i;
}
}
else if(b[poz]>a[i] || b[poz]==0)
{
b[poz]=a[i];
ind[poz]=i;
if(poz>len)++len;
}
}
fout<<len<<'\n';
int k=1;
while(k<=len)
{
fout<<a[ind[k]]<<" ";
k++;
}
return 0;
}