Cod sursa(job #1653506)

Utilizator mirunazMiruna Zavelca mirunaz Data 16 martie 2016 09:14:51
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<cstdio>
using namespace std;
int i,n,m=0,med,ans,l,r;
int v[100001],q[100001],p[100001];
FILE *in,*out;
int main ()
{
    in=fopen("scmax.in","r");
    out=fopen("scmax.out","w");
    fscanf(in,"%d",&n);
    for(i=1;i<=n;i++)
    {
        fscanf(in,"%d",&v[i]);
        l=1;
        r=m;
        ans=0;
        while(l <= r)
        {
            med = (l + r) / 2;
            if(q[med] < v[i])
            {
                l = med + 1;
                //ans = med;
            }
            else
            {
                r = med - 1;
                ans = med;
            }
        }
        if(ans == 0)
        {
            m ++;
            ans = m;
        }
        q[ans]=v[i];
        p[i]=ans;
    }
    med = m;
    fprintf(out,"%d\n",m);
    for(i=n;i>0 && m;i--)
        if(p[i]==m)
        {
            q[m]=v[i];
            m--;
        }
    for(i=1;i<=med;i++)
        fprintf(out,"%d ",q[i]);
    return 0;
}