Pagini recente » Cod sursa (job #182344) | Cod sursa (job #608843) | Cod sursa (job #3150388) | Cod sursa (job #1467879) | Cod sursa (job #2474817)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout ("scmax.out");
int dp[6000001];
int poz[6000001];
int v[6000001];
int a[6000001];
int main () {
int n, x;
int dpd = 0;
int da = 0, m = 6000001;
int l = 0, r = dpd;
fin >> n;
for (int i = 1; i <= n; i++) {
fin >> v[i];
int rasp = -1;
l = 0;
r = dpd;
while (l <= r) {
int mij = (l+r) / 2;
if (v[i] > dp[mij])
l = mij + 1, rasp = mij;
else
r = mij-1;
}
dp[rasp + 1] = v[i];
poz[i] = rasp + 1;
if (rasp == dpd)
dpd++;
}
fout << dpd << endl;
for (int i = n; i >= 1 && dpd > 0; i--) {
if (poz[i] == dpd){
da++;
a[da] = v[i];
dpd--;
}
}
for (int i = da; i >= 1; i--)
fout << a[i] << ' ';
}