Pagini recente » Cod sursa (job #985579) | Cod sursa (job #1882109) | Cod sursa (job #619758) | Cod sursa (job #731196) | Cod sursa (job #2565424)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,v[100005],d[100005],tata[100005],sol[100005];
int main()
{
fin >> n;
for (i=1; i<=n; i++)
fin >> v[i];
d[1] = 1; int k = 1;
for (i=2; i<=n; i++)
{
int st = 1; int dr = k;
while (st <= dr)
{
int mid = (st+dr)/2;
if (v[d[mid]] < v[i])
st = mid+1;
else
dr = mid-1;
}
if (st == k+1)
k++;
d[st] = i; tata[i] = d[st-1];
}
int x = d[k]; int t = 0;
while (x != 0)
{
sol[++t] = x;
x = tata[x];
}
fout << t << "\n";
for (i=t; i>=1; i--)
fout << v[sol[i]] << " ";
return 0;
}