Pagini recente » Cod sursa (job #2048585) | Cod sursa (job #1601027) | Cod sursa (job #3206119) | Cod sursa (job #1439879) | Cod sursa (job #880032)
Cod sursa(job #880032)
#include <fstream>
#define nmax 100000
#define inf 2000000002
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,a[nmax],p[nmax],q[nmax],i,l,st[nmax],k,t;
int cautbin(int st, int dr, int x)
{
int m=0;
while(st<dr)
{
m=(st+dr)/2;
if(q[m]>=x)
dr=m;
else
st=m+1;
}
return st;
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>a[i];
q[i]=inf;
}
k=0;
for(i=1;i<=n;i++)
{
k=cautbin(1,l+1,a[i]);
if(q[k]==inf)
l++;
q[k]=a[i];
p[i]=k;
}
g<<l<<"\n";
k=0;
for(int i=n;i>=1;--i)
if(p[i]==l)
st[++k]=a[i],--l;
for(int i=k;i>=1;--i)
g<<st[i]<<' ';
return 0;
}