Pagini recente » Cod sursa (job #161537) | Cod sursa (job #584176) | Cod sursa (job #1408386) | Cod sursa (job #1977128) | Cod sursa (job #2134395)
#include<fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int k;
int n,a[100010];
int t[100010],d[100010];
void afisare(int x) {
if (t[x]==0) cout<<a[x]<<" ";
else {
afisare(t[x]);
cout<<a[x]<<" ";
}
}
int main() {
cin>>n;
for (int i=1; i<=n; i++) cin>>a[i];
d[1]=1; k=1;
for (int i=2; i<=n; i++) {
int st=1, dr=k;
while (st<=dr) {
int mid=(st+dr)/2;
if (a[d[mid]]>=a[i]) dr=mid-1;
else st=mid+1;
}
if (st==k+1) k++;
d[st]=i;
t[i]=d[st-1];
}
cout<<k<<'\n';
afisare(d[k]);
return 0;
}