Pagini recente » Cod sursa (job #2282460) | Cod sursa (job #1202436) | Cod sursa (job #614697) | Cod sursa (job #307991) | Cod sursa (job #1830983)
#include <cstdio>
#include <fstream>
using namespace std;
int i, j, n, lung[100005],cont,maxi,sf,val[100005],aux,sol[100005];
int v[100005];
int minim(int a,int b)
{
if(a<b) return a;
return b;
}
void afisare()
{
int t;
for(t=1;t<=sf;t++)
{
printf("%d ",val[t]);
}
printf("\n");
}
int binary(int st,int dr,int x)
{
int mij;
while(st<=dr)
{
mij=(st+dr)/2;
if( val[mij] >= x && val[mij-1]<x )
{
val[mij] = min(val[mij],x);
return mij;
}
else
{
if(val[mij]>x)
{
dr=mij-1;
}
else
st=mij+1;
}
}
}
int main() {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&v[i]);
if(v[i] > val[sf])
{
sf++;
val[sf] = v[i];
lung[i] = sf;
}
else
{
lung[i]=binary(1,sf,v[i]);
}
// afisare();
}
printf("%d\n",sf);
for(i=1;i<=sf;i++)
{
//printf("%d ",val[i]);
}
//printf("\n");
int t=sf;
i=n;
cont=0;
aux=2000000000;
while (sf) {
if (lung[i] == sf && v[i]<aux) {
cont++;
sol[sf]=v[i];
aux=v[i];
sf--;
}
i--;
}
for(i=1;i<=t;i++)
{
printf("%d ",sol[i]);
}
}