Cod sursa(job #1692340)

Utilizator PopoviciRobertPopovici Robert PopoviciRobert Data 20 aprilie 2016 18:26:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#define MAXN 100000
int v[MAXN+1],Q[MAXN+1],P[MAXN+1],v1[MAXN+1];
int main(){
    FILE*fi,*fout;
    int i,n,rez,pas,m,poz;
    fi=fopen("scmax.in" ,"r");
    fout=fopen("scmax.out" ,"w");
    fscanf(fi,"%d" ,&n);
    for(i=0;i<n;i++)
       fscanf(fi,"%d" ,&v[i]);
    m=0;
    for(i=0;i<n;i++){
        if(m==0){
           Q[m++]=v[i];
           P[i]=m-1;
        }
        else{
              rez=-1;
              for(pas=1<<18;pas;pas>>=1)
                 if(rez+pas<m&&Q[rez+pas]<v[i])
                    rez+=pas;
              rez++;
              Q[rez]=v[i];
              P[i]=rez;
              if(rez==m)
                m++;
        }
    }
    fprintf(fout,"%d\n" ,m);
    poz=0;
    for(i=n-1;i>=0;i--)
      if(P[i]==m-1){
         v1[poz]=v[i];
         m--;
         poz++;
      }
    for(i=poz-1;i>=0;i--)
       fprintf(fout,"%d " ,v1[i]);
    fclose(fi);
    fclose(fout);
    return 0;
}