Pagini recente » Cod sursa (job #4213) | Cod sursa (job #2605580) | Cod sursa (job #1469506) | Cod sursa (job #2405952) | Cod sursa (job #2970752)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int Nmax = 100000;
const int ValMax = 2000000000;
int lensol;
int v[Nmax + 1], best[Nmax], previ[Nmax];
void reconst(int poz){
if(previ[poz] == -1){
fout << v[poz] << " ";
return;
}
reconst(previ[poz]);
fout << v[poz] << " ";
}
int main()
{
int n, sol, l ,r ,mid;
fin >> n;
for(int i = 0; i < Nmax; i++){
best[i] = Nmax;
}
v[Nmax] = ValMax;
lensol = 0;
for(int i = 0; i < n; i++){
fin >> v[i];
l = 0;
r = lensol;
sol = 0;
while(l <= r){
mid = (l + r) / 2;
if(v[i] <= v[best[mid]]){
sol = mid;
r = mid - 1;
}
else{
l = mid + 1;
}
}
best[sol] = i;
if(sol == 0){
previ[i] = -1;
}
else{
previ[i] = best[sol - 1];
}
if(sol == lensol){
lensol++;
}
}
fout << lensol << '\n';
reconst(n - 1);
return 0;
}