Pagini recente » Cod sursa (job #2692158) | Cod sursa (job #908558) | Cod sursa (job #1248241) | Cod sursa (job #1240353) | Cod sursa (job #2436396)
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
const int N = 100010;
int n,Lmax,lo,hi,mi,x[N],b[N],s[N],p[N];
void afisare(int);
int main()
{
f>>n;
for(int i=1;i<=n;i++)
f>>x[i];
for(int i=1;i<=n;i++)
{
lo=0;hi=Lmax+1;
while(hi-lo>1)
{
mi=(lo+hi)/2;
if(s[mi]<x[i])
lo=mi;
else
hi=mi;
}
b[i]=p[lo];
s[hi]=x[i];
p[hi]=i;
if(hi>Lmax)Lmax=hi;
}
g<<Lmax<<'\n';
afisare(p[Lmax]);
return 0;
}
void afisare(int i)
{
if(i==0)return;
afisare(b[i]);
g<<x[i]<<' ';
}