Pagini recente » Cod sursa (job #888615) | Cod sursa (job #236854) | Cod sursa (job #301357) | Cod sursa (job #2536203) | Cod sursa (job #2766388)
#include <cstdio>
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
const int NMAX = 100000;
int v[NMAX + 5],x[NMAX + 5],t[NMAX + 5],sol[NMAX + 5];
int main()
{
int n, i, k, p, st, dr, mid, l;
bool ok;
in >> n;
for(i=1;i<=n;i++)
in >> v[i];
l=0;
x[0]=-1;
for(i=1;i<=n;i++)
{
st=1;dr=l;ok=0;
while(st<=dr)
{
mid=(st+dr)/2;
if(v[x[mid]] > v[i])
dr=mid-1;
else
if(v[x[mid]] < v[i])
st=mid+1;
else{
ok=1;
break;
}
}
if(!ok)
{
if(st == l+1)
{
l++;
x[l]=i;
t[i]=x[l-1];
}
else
if(st==1)
{
x[st]=i;
t[i]=-1;
}
else
{
x[st]=i;
t[i]=x[st-1];
}
}
}
out << l <<"\n";
for(p = x[l]; p != -1; p = t[p])
{
k++;
sol[k]=v[p];
}
while(k)
{
out << sol[k] <<" ";
k--;
}
return 0;
}