Pagini recente » Cod sursa (job #131891) | Cod sursa (job #1009386) | Cod sursa (job #2040456) | Cod sursa (job #1749168) | Cod sursa (job #1640744)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int NMAX = 100005;
const int INF = 1e11;
vector < int > Sol;
int V[NMAX],Q[NMAX],P[NMAX],L,n;
inline int Insert(int x,int Lo,int Hi){
int Mid;
while(Lo <= Hi){
if(Lo == Hi){
if(Lo > L){
Q[++L + 1] = INF;
}
Q[Lo] = x;
return Lo;
}
Mid = (Hi + Lo)/2;
if(Q[Mid] < x)
Lo = Mid + 1;
else
Hi = Mid;
}
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> V[i];
L = 0; Q[1] = INF;
for(int i = 1; i <= n; i++){
P[i] = Insert(V[i],1,L + 1);
}
for(int i = L; i > 0; i--){
while(P[n] != i) n--;
Sol.push_back(V[n]);
}
fout << L << "\n";
for(int i = Sol.size() - 1;i >= 0;i--)
fout << Sol[i] << " ";
return 0;
}