Cod sursa(job #1118149)

Utilizator roparexRoparex roparex Data 24 februarie 2014 01:00:57
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#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(mid<0||mid>n) return 0;
    if((v[i]>m[mid]||m[mid]==0)&&(v[i]<m[mid+1]||m[mid+1]==0)) return mid;
    if(v[i]<m[mid]) return fbin(x,mid-1);
    if(v[i]>m[mid+1]&&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<=maxim&&deg!=0) {maxim=deg;if(saturat[deg-1]!=b[deg-1])swape(deg);else b[deg]=i;}
    }
    printf("%ld\n",n-maxim+1);
    for(i=maxim;i<=n;i++)
        printf("%ld ",v[b[i]]);
}