Pagini recente » Cod sursa (job #953077) | Cod sursa (job #316660) | Cod sursa (job #1419224) | Cod sursa (job #2287389) | Cod sursa (job #1118152)
#include<cstdio>
int n,v[100001],m[100001],i,b[100001],saturat[100001];
void swape(int lg)
{
for(i=lg; i<=n; i++)
b[i]=saturat[i];
}
int fbin(int x,int y)
{
int mid=(x+y)/2;
if((v[i]>m[mid]||m[mid]==0)&&(v[i]<m[mid+1]||m[mid+1]==0)) return mid;
if(v[i]<m[mid]&&mid-1>=x) return fbin(x,mid-1);
if(v[i]>m[mid]&&mid+1<=y) return fbin(mid+1,y);
return 0;
}
int main()
{
int deg;
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&n);
int maxim=n;
for(i=1; i<=n; i++)
scanf("%ld",&v[i]);
for(i=n; i>=1; i--)
{
deg=fbin(maxim,n);
saturat[deg]=i;
m[deg]=v[i];
if(deg-1<maxim&°!=0)
{
maxim=deg-1;
if(saturat[deg-1]!=b[deg-1])swape(deg);
else b[deg]=i;
}
}
printf("%ld\n",n-maxim);
for(i=maxim+1; i<=n; i++)
printf("%ld ",v[b[i]]);
}