Pagini recente » Cod sursa (job #2050382) | Cod sursa (job #2394908) | Cod sursa (job #190476) | Cod sursa (job #680816) | Cod sursa (job #2558355)
#include <iostream>
#include <fstream>
std::ifstream f("input.in");
std::ofstream g("output.out");
const int NMAX = 100010;
int n,v[NMAX],t[NMAX],d[NMAX],len;
void reconst(int index){
if(t[index])
reconst(t[index]);
g << v[index] << ' ';
}
int main(){
f >> n;
for(int i = 1;i <= n;++i)
f >> v[i];
len = d[1] = 1;
for(int i = 2;i <= n;++i){
int left = 1;
int right = len;
while(left <= right){
int mid = (left + right) >> 1;
if(v[ d[mid] ] < v[i])
left = mid + 1;
else
right = mid - 1;
}
int pos = left;
if(pos > len){
len++;
d[len] = i;
t[d[len]] = d[pos - 1];
}else{
d[pos] = i;
t[d[pos]] = d[pos - 1];
}
}
g << len << '\n';
reconst(d[len]);
return 0;
}