Pagini recente » Cod sursa (job #1687999) | Cod sursa (job #124125) | Cod sursa (job #1977395) | Cod sursa (job #39052) | Cod sursa (job #2623993)
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long v1[100001], v2[100001], i, j, x, max1, n, v3[100001], p, u, m, poz, c, vsol[100001];
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>v1[i];
v3[i]=9999999999;
}
v3[1]=v1[1];
v2[1]=1;
max1=2;
for(i=2;i<=n;i++)
{
p=0;
u=max1;
while(u-p!=1)
{
m=(p+u)/2;
if(v3[m]>v1[i])
u=m;
else
p=m;
}
if(u>=max1)
max1=u+1;
if(v3[u]>v1[i] && v3[p]<v1[i])
{
v3[u]=v1[i];
v2[i]=u;
}
}
max1=0;
for(i=1;i<=n;i++)
{
if(v2[i]>max1)
{
poz=i;
max1=v2[i];
}
}
g<<max1<<'\n';
j=1;
c=max1;
vsol[c]=v1[poz];
c--;
for(i=poz-1;i>=1;i--)
{
if(v2[i]==c && v1[poz]>=v1[i])
{
poz=i;
vsol[c]=v1[i];
c--;
}
}
for(i=1;i<=max1;i++)
g<<vsol[i]<<" ";
return 0;
}