Pagini recente » Cod sursa (job #1103831) | Cod sursa (job #115841) | Cod sursa (job #2672971) | Cod sursa (job #2236861) | Cod sursa (job #1503436)
#include<iostream>
#include<fstream>
using namespace std;
const int NMAX=100005;
int v[NMAX];
int ultim[NMAX];
int pred[NMAX];
int lung[NMAX];
int maxx;
inline int cautbin(int val)
{
int st=0,fin=maxx,mid,p=0;
while(st<=fin)
{
mid=(st+fin+1)>>1;
if(v[ultim[mid]]>=val||ultim[mid]==0)
{
fin=mid-1;
}
else
{
st=mid+1;
p=mid;
}
}
if(p==maxx)
++maxx;
return p;
}
int main()
{
ifstream si;
si.open("scmax.in");
ofstream so;
so.open("scmax.out");
int n;
si>>n;
int poz,i;
for(i=1;i<=n;++i)
{
si>>v[i];
poz=cautbin(v[i]);
lung[i]=poz+1;
pred[i]=ultim[poz];
ultim[poz+1]=i;
}
so<<maxx<<'\n';
poz=ultim[maxx];
i=1;
while(poz)
{
ultim[i++]=poz;
poz=pred[poz];
}
for(i=maxx;i;--i)
so<<v[ultim[i]]<<' ';
so<<'\n';
si.close();
so.close();
return 0;
}