Pagini recente » Cod sursa (job #1354988) | Cod sursa (job #1354419) | Cod sursa (job #1421224) | Cod sursa (job #2396758) | Cod sursa (job #2980429)
#include <bits/stdc++.h>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100010;
int n,lgMax,a[N],b[N],p[N],v[N];
void afiseazaRecursiv(int i)
{
if(i==0)
return;
afiseazaRecursiv(b[i]);
g<<a[i]<<' ';
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>a[i];
for(int i=1;i<=n;i++)
{
int lo=0,hi=lgMax+1,mi;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(v[mi]<a[i])
lo=mi;
else
hi=mi;
}
if(hi==lgMax+1)
lgMax++;
p[hi]=i;
v[hi]=a[i];
b[i]=p[lo];
}
g<<lgMax<<'\n';
afiseazaRecursiv(p[lgMax]);
return 0;
}