Pagini recente » Cod sursa (job #2489704) | Cod sursa (job #3248714) | Cod sursa (job #1678589) | Cod sursa (job #1589089) | Cod sursa (job #661590)
Cod sursa(job #661590)
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
int ans , N , nr , apos;
int bst[NMAX] , L[NMAX] , p[NMAX] , v[NMAX];
int bins(int x)
{
int st = 0 , dr = nr , mid;
while(st <= dr) {
mid = (st + dr)>>1;
if(v[ L[mid] ] < x && v[ L[mid + 1] ] >= x) return mid;
if(v[ L[mid + 1] ] < x) st = mid + 1;
else dr = mid - 1;
}
return nr;
}
void write(int i)
{
if(p[i] > 0) write(p[i]);
fout<<v[i]<<' ';
}
int main()
{
fin>>N;
for(int i = 1;i<=N;++i)
fin>>v[i];
nr = L[1] = bst[1] = 1;
ans = apos = 1;
for(int i = 2;i<=N;++i) {
int pos = bins(v[i]);
p[i] = L[pos];
bst[i] = pos + 1;
L[pos + 1] = i;
if(nr < pos + 1) nr = pos + 1;
if(bst[i] > ans) ans = bst[i] , apos = i;
}
fout<<ans<<'\n';
write(apos);
return 0;
}