Cod sursa(job #1083818)

Utilizator iordache.bogdanIordache Ioan-Bogdan iordache.bogdan Data 16 ianuarie 2014 14:14:58
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <cstdio>
#include <fstream>

using namespace std;

int n,i,k,p,st,dr,mid,l;
int v[100005],x[100005],t[100005],sol[100005];

bool ok;

int main() {
    FILE *f = fopen("scmax.in","r");
    ofstream g("scmax.out");
    fscanf(f,"%d",&n);
    for(i=1;i<=n;i++)
        fscanf(f,"%d",&v[i]);
    l=0;
    for(i=1;i<=n;i++) {
        st=1;dr=l;ok=0;
        while(st<=dr) {
            mid=(st+dr)/2;
            if(v[x[mid]]>v[i])
                dr=mid-1;
            else
                if(v[x[mid]]<v[i])
                    st=mid+1;
                else{
                    ok=1;break;
                }
        }

        if(!ok){
        if(st==l+1){
            l++;
            x[l]=i;
            if(l>1)
                t[i]=x[l-1];
            else
                t[i]=-1;
        }
        else
            if(st==1){
                x[st]=i;
                t[i]=-1;
            }
            else
            {
                x[st]=i;
                t[i]=x[i-1];
            }
        }
    }
    g<<l<<"\n";
    for(p=x[l];p!=-1;p=t[p]){
        k++;
        sol[k]=v[p];
    }
    while(k) {
        g<<sol[k]<<" ";
        k--;
    }
    return 0;
}