Pagini recente » Borderou de evaluare (job #2355293) | Borderou de evaluare (job #1213273) | Borderou de evaluare (job #1285786) | Borderou de evaluare (job #207936) | Cod sursa (job #714655)
Cod sursa(job #714655)
#include<stdio.h>
#include<vector>
#include<algorithm>
using namespace std;
int mij,j,n,i,sir[1001000],j1,i1,nr,found,v[100100],lmax,OK,xo[100100];
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&sir[i]);
}
v[1]=sir[1];
lmax=1;
int max=0;
for(i=2;i<=n;i++)
{
i1=1; j1=lmax; OK=1;
if(sir[i]>v[1]&&sir[i]<v[lmax])
{
while(i1+1!=j1)
{
mij=(i1+j1)/2;
if(sir[i]==v[mij])
{ OK=0;
break; }
if(sir[i]>v[mij])
{
i1=mij+1;
}
else
if(sir[i]<v[mij])
{
j1=mij-1;
}
}
if(OK==1)
{
v[j1]=sir[i];
lmax-=(n-j1); n=j1;
for(j=j1+1;j>=lmax+1;j++)
v[j]=0;
found=1;
break;
}
}
else
if(sir[i]>v[j1])
{
v[++j1]=sir[i];
lmax=lmax+1;
}
else
if(sir[i]<v[1])
{
for(j=1;j<=lmax;j++)
v[j]=0;
v[1]=sir[i];
lmax=1;
}
if(lmax>max)
{
max=lmax;
for(j=1;j<=max;j++)
xo[j]=v[j];
}
}
printf("%d\n",max);
for(i=1;i<=max;i++)
{
printf("%d ",xo[i]);
}
return 0;
}