Pagini recente » Cod sursa (job #1665324) | Cod sursa (job #619268) | Cod sursa (job #804144) | Cod sursa (job #1931105) | Cod sursa (job #2565432)
#include <fstream>
std::ifstream f("scmax.in");
std::ofstream g("scmax.out");
const int NMAX = 100005;
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];
d[1] = len = 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])
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;
}