Pagini recente » Cod sursa (job #548885) | Cod sursa (job #1452996) | Cod sursa (job #692638) | Cod sursa (job #1713132) | Cod sursa (job #1454565)
#include <fstream> // varianta 2 - O(N*logN) (26.06.2015)
#include <algorithm>
using namespace std;
ofstream fout("scmax.out");
ifstream fin("scmax.in");
const int MMAX = 100001;
int n, lg, p;
int sir[MMAX], lista[MMAX], poz[MMAX];
void lis()
{
for(int i=1; i<=n; i++) {
p = upper_bound(lista + 1, lista + lg + 1, sir[i]) - lista;
if(sir[i] == lista[p-1]) p--;
lista[p] = sir[i];
poz[i] = p;
if(p > lg) lg = p;
}
fout << lg << '\n';
}
void traceback()
{
int yolo = 0;
for(int i=n; i; i--)
if(poz[i] == lg) {
lista[++yolo] = sir[i];
lg--;
}
for(int i=yolo; i; i--)
fout << lista[i] << ' ';
}
int main()
{
fin >> n;
for(int i=1; i<=n; i++) fin >> sir[i];
lis();
traceback();
fin.close();
fout.close();
return 0;
}