Pagini recente » Rating Teka Jef (tekajef) | Cod sursa (job #1300050) | Cod sursa (job #951011) | Cod sursa (job #2581684) | Cod sursa (job #2543598)
#include <bits/stdc++.h>
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], idx[dim], urm[dim], poz, l;
void cauta(long long x)
{
long long st = 1 << 16;
poz = 0;
for(; st; st>>=1)
if(poz + st <= l && v[idx[poz + st]] < x)
poz += st;
}
void afis(int p)
{
if(p == 0)
return;
afis(urm[p]);
out<<v[p]<<' ';
}
int main()
{
in>>n;
l = 0;
for(long long i = 1; i <= n; i++)
{
in>>v[i];
idx[i] = 0;
v[0] = oo;
}
for(long long i = 1;i <= n;i++)
{
cauta(v[i]);
dp[i] = poz + 1;
if(v[i] < v[idx[poz + 1]])
idx[poz + 1] = i;
urm[i] = idx[poz];
l = max(l, poz + 1);
}
out<<l<<'\n';
for(int i = 1;i <= n;i++)
{
if(dp[i] == l)
{
afis(i);
break;
}
}
return 0;
}