Pagini recente » Cod sursa (job #2498163) | Cod sursa (job #2765073) | Cod sursa (job #423702) | Cod sursa (job #383263) | Cod sursa (job #2484270)
#include <fstream>
#include <iostream>
#define NMAX 100000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, maxi, v[NMAX+10], poz[NMAX+10], l[NMAX+10], sol[NMAX+10];
int cautbin(int val)
{
int st=1, dr=maxi;
while(st <= dr)
{ int mij = (st + dr) / 2;
if(v[poz[mij]] < val) st = mij + 1;
else dr = mij - 1;
}
return st;
}
int main()
{
f >> n;
for(int i=1; i<=n; i++) f >> v[i];
l[1] = poz[1] = maxi = 1;
for(int i=2; i<=n; i++)
{ if(v[i] > v[poz[maxi]]) poz[++maxi] = i, l[i] = maxi;
else
{ int p = cautbin(v[i]);
l[i] = p;
poz[p] = i;
}
}
g << maxi << '\n';
int maxi1 = maxi;
for(int i=n; i; i--)
if(l[i] == maxi) sol[maxi] = v[i], maxi--;
for(int i=1; i<=maxi1; i++) g << sol[i] << ' ';
g << '\n';
return 0;
}