Ciao simone1988, mi sa che ti conosco (oh! ti sei deciso a postare un po' di codice!)

Nonostante questo, ancora non so come è fatto il programma... quell'array di struct è globale? Innanzitutto se è così dichiaralo locale al main perché tu-sai-chi non lo accetterà MAI (e fa pure bene). Poi, a questo punto, alla funzione di ricerca del massimo devi passare proprio quell'array di struct col suo size, dopo di ché devi modificare la funzione di selezione del massimo:

all'inizio ti confronta due interi, quindi è

codice:
int max_I(int a,int b) {

   if (a > b)
      return a;   
   else
      return b;
}
deve diventare (è un po' rozza così, l'ideale sarebbe lavorare con i puntatori)

codice:
stud max_I(stud a, stud  b) {

   if (a.assenze[0] > b.assenze[0])
      return a;   
   else
      return b;
}
è chiaro quello che fa, no?

Per quanto riguarda la funzione di ricerca del massimo

codice:
stud massimo_a_ricDI(stud a[],int n)  {

   int mediano;    /* soluzione del caso base  */  
   if(n == 1)
      return a[0];  
   else {     /* autoattivazioni */
      mediano = (n-1)/2;    
      return max_I(massimo_a_ricDI(a,mediano+1),massimo_a_ricDI(a+mediano+1,n-mediano-1));
   } 
}
in pratica devi adattare tutto al tuo tipo che non è più int ma "stud"...

Se hai ancora problemi, posta tutto il codice altrimenti continuerai ad andare in giro per il web senza avere risposta x°D