Pagini recente » Cod sursa (job #1124878) | Cod sursa (job #2521663) | Cod sursa (job #2551030) | Cod sursa (job #2494839) | Cod sursa (job #2452500)
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[100001],mini[100001],m,afis[100001],inainte[100001];
int cautbin(int val)
{
int pas=1<<16,r=0;
while(pas)
{
if(r+pas<=m&&v[mini[r+pas]]<val)
r+=pas;
pas/=2;
}
return r;
}
int main()
{
int n,i,x,cnt=0,poz;
in>>n;
for(i=1; i<=n; i++)
in>>v[i];
for(i=1; i<=n; i++)
{
x=cautbin(v[i]);
if(x==m)
{
mini[++m]=i;
inainte[i]=mini[m-1];
}
else
{
mini[x+1]=i;
inainte[i]=mini[x];
}
}
out<<m<<'\n';
poz=mini[m];
while(poz!=0)
{
afis[++cnt]=v[poz];
poz=inainte[poz];
}
for(i=cnt; i>=1; i--)
out<<afis[i]<<" ";
return 0;
}