Pagini recente » Cod sursa (job #2772005) | Cod sursa (job #362653) | Cod sursa (job #3135727) | Cod sursa (job #178612) | Cod sursa (job #1632878)
#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;
}