Pagini recente » Cod sursa (job #2220397) | Clasament alex002 | Ciorna | Cod sursa (job #2095680) | Cod sursa (job #2596040)
#include <fstream>
#include <vector>
#include <algorithm>
#define DIM 100010
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int i, n, j, x, p[DIM], ante[DIM], poz, a[DIM], INF;
void afisare(int poz, int ante[]) {
if (poz != 0) {
afisare(ante[poz], ante);
fout << a[poz] << " ";
}
}
void lis(int a[]) {
INF = ~INF;
INF = (unsigned int)INF >> 1;
int maxim;
vector<int> d(n + 1, INF);
maxim = d[0] = -INF;
for (int i = 1; i <= n; i++) {
int j = upper_bound(d.begin(), d.end(), a[i]) - d.begin();
if (a[i] != d[j - 1]) {
d[j] = a[i];
p[j] = i;
ante[i] = p[j - 1];
if (j > maxim)
maxim = j, poz = i;
}
}
fout << maxim << "\n";
afisare(poz,ante);
}
int main() {
fin >> n;
for (i = 1; i <= n; i++) {
fin >> a[i];
}
lis(a);
}