Pagini recente » Cod sursa (job #251904) | Cod sursa (job #414603) | Cod sursa (job #3195257) | Cod sursa (job #3226362) | Cod sursa (job #1969886)
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define nmax 100010
#define maxim 2000000010
int v[nmax],a[nmax],poz[nmax],t[nmax];
void afisare(int k)
{
if(k!=0)
{
afisare(t[k]);
g<<v[k]<<" ";
}
}
int main()
{
int n,i,qw,lmax,k;
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
lmax=0;
for(i=1;i<=n;i++)
{
if(v[i]>a[lmax])
{
lmax+=1;
a[lmax]=v[i];
poz[lmax]=i;
t[i]=poz[lmax-1];
a[lmax+1]=maxim;
}
else
{
qw=upper_bound(a+1,a+lmax,v[i]-1)-a;
a[qw]=v[i];
poz[qw]=i;
t[i]=poz[qw-1];
}
}
g<<lmax<<'\n';
k=poz[lmax];
afisare(k);
return 0;
}