Pagini recente » Cod sursa (job #1596451) | Cod sursa (job #1870115) | Cod sursa (job #888231) | Cod sursa (job #44729) | Cod sursa (job #2538686)
#include <fstream>
std::ifstream f("scmax.in");
std::ofstream g("scmax.out");
const int NMAX = 100'005;
int n,len,v[NMAX],t[NMAX],d[NMAX];
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) / 2;
if(v[ d[mid] ] >= v[i])
right = mid - 1;
else
left = 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;
}