Pagini recente » Cod sursa (job #2780007) | Cod sursa (job #2784468) | Cod sursa (job #1869495) | Cod sursa (job #1034928) | Cod sursa (job #2495789)
#include <fstream>
#include <bitset>
#include <iostream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100002], lis[100002], n;
int CautareBinara(int x, int dim)
{
int st, dr, mij, poz;
poz = -1;
st = 1;
dr = dim;
while(st <= dr)
{
mij = (st + dr) / 2;
if(lis[mij] > x)
{
dr = mij - 1;
poz = mij;
}
else
st = mij + 1;
}
return poz;
}
int main()
{
int maxim, poz, k = 1;
fin >> n;
for(int i = 1; i <= n; i++)
fin >> a[i];
fin.close();
lis[1] = a[1];
for(int i = 2; i <= n; i++)
{
if(a[i] < lis[1])
poz = 1;
else
if(a[i] > lis[k])
{
poz = k + 1;
k++;
}
else
poz = CautareBinara(a[i], k);
if(lis[poz - 1] < a[i])
lis[poz] = a[i];
}
fout << k << "\n";
for(int i = 1; i <= k; i++)
fout << lis[i] << " ";
fout << "\n";
fout.close();
return 0;
}