Pagini recente » Cod sursa (job #369628) | Cod sursa (job #1247685) | Cod sursa (job #734374) | Cod sursa (job #1715301) | Cod sursa (job #1003360)
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,nr,nrr,Max,i,best[100002],poz[100002],a[100002],b[100002],x,ind;
int caut(int x)
{
int m,st,dr;
st=1;
dr=nr;
while(st<=dr)
{
m=(st + dr)/2;
if(best[m]==x) return m;
else if(x<best[m]) dr=m-1;
else st=m+1;
}
return st;
}
int main()
{
f>>n;
nr=0;
Max=0;
for(i=1; i<=n; ++i)
{
f>>a[i];
int pz=caut(a[i]);
best[pz]=a[i];
if(pz>nr) ++nr;
poz[i]=pz;
if(Max<=poz[i]){
Max=poz[i];
ind=i;
}
}
nrr=nr-1;b[nr]=a[ind];
for(i=ind-1;i>=1 && nrr;--i) if(a[i]<b[nrr+1] && poz[i]==nrr) b[nrr--]=a[i];
g<<Max<<'\n';
for(i=1; i<=nr; ++i) g<<b[i]<<" ";
return 0;
}