Pagini recente » Cod sursa (job #2332515) | Cod sursa (job #3210976) | Cod sursa (job #3217648) | Cod sursa (job #1866490) | Cod sursa (job #2304912)
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, v[100005], d[100005], t[100005], p, u, k = 1;
void sol(int a){
if(a){
sol(t[a]);
fout<<v[a]<<" ";
}
}
int main()
{
fin>>n;
for(int i = 1; i <= n; i++){
fin>>v[i];
}
d[1] = 1;
for(int i = 2; i <= n; i++){
p = 1;
u = k;
while(p <= u){
int mid = (p + u) / 2;
if(v[d[mid]] >= v[i]){
u = mid - 1;
}
else{
p = mid + 1;
}
}
if(p > k){
k++;
d[k] = i;
t[i] = d[p - 1];
}
else{
d[p] = i;
t[i] = d[p - 1];
}
}
fout<<k<<"\n";
sol(d[k]);
return 0;
}