Pagini recente » Cod sursa (job #2838949) | Cod sursa (job #1572569) | Cod sursa (job #699518) | Cod sursa (job #1750551) | Cod sursa (job #2184295)
#include<bits/stdc++.h>
#define NMAX 100010
using namespace std;
#define DIM 100000
char buff[DIM];
int poz=0;
void read(int &nr) {
nr=0;
char semn='+';
while (buff[poz]<'0' || buff[poz]>'9') {
semn=buff[poz];
if (++poz==DIM) fread(buff,1,DIM,stdin),poz=0;
}
while (buff[poz]>='0' && buff[poz]<='9') {
nr=nr*10+buff[poz]-'0';
}
if (semn=='-') nr=-nr;
}
int n,a[NMAX],t[NMAX],d[NMAX];
void rec(int p) {
if (p==0) return;
else {
rec(t[p]);
cout<<a[p]<<" ";
}
}
int main() {
freopen("scmax.in","r",stdin);
freopen("scmax.out","r",stdout);
cin>>n;
for (int i=1; i<=n; i++) cin>>a[i];
int k=1; d[1]=1;
for (int i=1; 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';
rec(d[k]);
return 0;
}