Pagini recente » Cod sursa (job #1068631) | Cod sursa (job #2274780)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int DM = 1e5 + 1;
int n,v[DM];
int dp[DM],p[DM],l, ind;
int bin(int x, int lo, int hi)
{
int mid;
while(lo < hi)
{
mid = (lo + hi) / 2;
if(v[dp[mid]] <= x) lo = mid + 1;
else hi = mid;
}
mid = (lo + hi) / 2;
if(v[dp[mid]] >= x) mid--;
return mid;
}
void afisare(int i)
{
if(p[i]) afisare(p[i]);
fout << v[i] << " ";
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++) fin >> v[i];
dp[0] = 0;
dp[1] = 1;
l = 1;
for(int i = 2; i <= n; i++)
{
int poz = bin(v[i], 0, l);
dp[poz + 1] = i;
p[i] = dp[poz];
if(poz + 1 > l)
{
l = poz + 1;
ind = i;
}
}
fout << l << '\n';
afisare(ind);
}