Pagini recente » Cod sursa (job #238085) | Cod sursa (job #2034673) | Cod sursa (job #1287079) | Cod sursa (job #835740) | Cod sursa (job #2002466)
#include <fstream>
#include <cmath>
#include <algorithm>
#define NMax 100005
using namespace std;
int n,k,lo,hi,mij,poz;
int sol[NMax],a[NMax],R[NMax];
int main()
{
ifstream f("scmax.in");
ofstream g("scmax.out");
f >> n;
for(int i = 1; i <= n; ++i)
f >> a[i];
k = 0;
sol[k] = 0;
for(int i = 1; i <= n; ++i){
if(a[i] > sol[k]){
++k;
sol[k] = a[i];
R[i] = k;
}else{
lo = 1;
hi = k;
poz = k;
while(lo <= hi){
mij = (lo + hi) / 2;
if(sol[mij] >= a[i]){
poz = mij;
hi = mij - 1;
}else{
lo = mij + 1;
}
}
sol[poz] = a[i];
R[i] = poz;
}
}
g << k <<'\n';
int lg = 0;
for(int i = n; i >= 1 && k; --i){
if(R[i] == k){
k--;
sol[++lg] = a[i];
}
}
for(int i = lg; i >= 1; --i)
g << sol[i] <<" ";
return 0;
}