Pagini recente » Cod sursa (job #1321210) | Cod sursa (job #466109) | Cod sursa (job #635642) | Cod sursa (job #2410622) | Cod sursa (job #2558662)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, k, i, st, dr, mid;
int v[100005], d[100005], dad[100005];
void subsir (int a){
if (a){
subsir (dad[a]);
fout << v[a] << " ";
}
}
int main(){
fin >> n;
for (i=1; i<=n; i++){
fin >> v[i];
}
d[1] = 1, k = 1;
for (i=2; i<=n; i++){
st = 1, dr = k;
while (st <= dr){
mid = st + (dr - st)/2;
if (v[d[mid]] >= v[i]){
dr = mid - 1;
}
else{
st = mid + 1;
}
}
if (st > k){
d[++k] = i;
}
else{
d[st] = i;
}
dad[i] = d[st - 1];
}
fout << k << "\n";
subsir (d[k]);
return 0;
}
//recapitulare