Pagini recente » Cod sursa (job #694101) | Cod sursa (job #1022201) | Cod sursa (job #454816) | Cod sursa (job #1492654) | Cod sursa (job #2543588)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const long long dim = (long long) (1e5) + 1;
const long long oo = (long long) (1e18);
long long n, v[dim], dp[dim], pr[dim], poz, l;
void cauta(long long x)
{
long long st = 1 << 16;
poz = 0;
for(; st; st>>=1)
if(poz + st <= l && dp[poz + st] < x)
poz += st;
}
int main()
{
in>>n;
l = 1;
for(long long i = 1; i <= n; i++)
{
in>>v[i];
dp[i] = oo;
}
for(long long 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';
for(long long i = 1;i <= l;out<<dp[i++]<<' ');
return 0;
}