Pagini recente » Cod sursa (job #272582) | Cod sursa (job #3154675) | Cod sursa (job #1573618) | Cod sursa (job #83171) | Cod sursa (job #2798713)
#include <iostream>
#include <fstream>
#define MAX 100010
#define NMAX 2000000000
using namespace std;
int n,ans;
int a[MAX],nmax[MAX],mmax[MAX],vans[MAX];
int main()
{
ifstream f ("scmax.in");
ofstream g ("scmax.out");
f>>n;
for(int i=1;i<=n;i++)
f>>a[i],
nmax[i]=NMAX;
for(int i=1;i<=n;i++){
mmax[i]=1;
int st=0,dr=ans;
while(st<dr){
int mij = (st+dr+1)/2;
if(nmax[mij] < a[i]) st=mij;
else dr=mij-1;
}
nmax[st+1]=min(nmax[st+1],a[i]);
mmax[i]=st+1;
ans = max(ans,mmax[i]);
}
g<<ans<<'\n';
vans[ans+1]=NMAX;
for(int i=n,j=ans;i>=1&&j;i--)
if(mmax[i]==j && a[i]<vans[j+1]){
vans[j] = a[i];
j--;
}
for(int i=1;i<=ans;i++)
g<<vans[i]<<" ";
f.close();
g.close();
return 0;
}