Pagini recente » Cod sursa (job #306049) | Profil FCT | Cod sursa (job #2390168) | Profil M@2Te4i | Cod sursa (job #1244566)
#include<fstream>
#include<iostream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int nmax = 100009;
int v[nmax],q[nmax],p[nmax],n,L,sol[nmax];
void citire()
{
in>>n;
for(int i = 1 ; i <= n ; i++)
in>>v[i];
in.close();
}
int bin_search(int val,int left,int right)
{
int mij;
while(left <= right)
{
mij = (left+right)/2;
if(val > q[mij])
left = mij+1;
else
right = mij-1;
}
if(left > L){
q[++L] = val;
return left;
}
else {
q[left] = val;
return left;
}
}
void buildPQ()
{
q[1] = v[1];
p[1] = 1;
L = 1;
for(int i = 2 ; i <= n ; i++){
p[i] = bin_search(v[i],1,L);
}
}
void build_sol()
{
int i,k = n;
for(i = L; i ; i--){
while(p[k] != i) k--;
sol[i] = v[k];
}
}
void afis_sol()
{
out<<L<<"\n";
for(int i = 1 ; i <= L ; i++)
out<<sol[i]<<" ";
out.close();
}
int main()
{
citire();
buildPQ();
build_sol();
afis_sol();
return 0;
}