#include #include void longestSub(int* ARRAY,int ARRAY_LENGTH, int** RESULT,int* RESULT_LENGTH){ //RESULT and RESULT_LENGTH will be modified by their pointers if(ARRAY_LENGTH<=1){ *RESULT=ARRAY; *RESULT_LENGTH=ARRAY_LENGTH; } else{ int PIVOT=ARRAY[0]; int *LONGEST_SUB=NULL; int LONGEST_SUB_LENGTH=0,i,j; int TEMPORARY_ARRAY_LENGTH=0, *TEMPORARY_ARRAY=NULL; for(i=1;i=ARRAY[i]){ TEMPORARY_ARRAY_LENGTH++; TEMPORARY_ARRAY=(int *)realloc(TEMPORARY_ARRAY,TEMPORARY_ARRAY_LENGTH*sizeof(int)); TEMPORARY_ARRAY[TEMPORARY_ARRAY_LENGTH-1]=ARRAY[j]; } } longestSub(TEMPORARY_ARRAY,TEMPORARY_ARRAY_LENGTH,&TEMPORARY_ARRAY,&TEMPORARY_ARRAY_LENGTH); if(LONGEST_SUB_LENGTH=PIVOT){ TEMPORARY_ARRAY_LENGTH++; TEMPORARY_ARRAY=(int *)realloc(TEMPORARY_ARRAY,TEMPORARY_ARRAY_LENGTH*sizeof(int)); TEMPORARY_ARRAY[TEMPORARY_ARRAY_LENGTH-1]=ARRAY[i]; } } longestSub(TEMPORARY_ARRAY,TEMPORARY_ARRAY_LENGTH,&TEMPORARY_ARRAY,&TEMPORARY_ARRAY_LENGTH); if(TEMPORARY_ARRAY_LENGTH+1>LONGEST_SUB_LENGTH){ LONGEST_SUB_LENGTH=TEMPORARY_ARRAY_LENGTH+1; LONGEST_SUB=(int*)realloc(LONGEST_SUB,(LONGEST_SUB_LENGTH)*sizeof(int)); LONGEST_SUB[0]=PIVOT; for(i=1;i