Pagini recente » Cod sursa (job #2815654) | Cod sursa (job #2904155) | Cod sursa (job #2432228) | Cod sursa (job #930785) | Cod sursa (job #2543577)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int dim = (int) (1e5) + 1;
const int oo = (int) (1e9) * 2 + 1;
int n, v[dim], dp[dim], pr[dim], poz, l, a;
void cauta(int x)
{
int st = 1;
poz = 0;
for(st; st < n; st<<=1);
for(poz; st; st>>=1)
if(poz + st <= n && dp[poz + st] < x)
poz += st;
}
void afis(int p)
{
if(p == 0)
return;
afis(pr[p]);
out<<dp[p]<<' ';
}
int main()
{
in>>n;
l = 1;
for(int i = 1; i <= n; i++)
{
in>>v[i];
dp[i] = oo;
}
for(int i = 1;i <= n;i++)
{
cauta(v[i]);
if(v[i] < dp[poz + 1])
{
dp[poz + 1] = v[i];
pr[poz + 1] = poz;
if(poz + 1 > l)
l = poz + 1;
}
}
out<<l<<'\n';
afis(l);
return 0;
}