Salve, ho risolto questo problema con due cicli ottenendo un 80/100 , quando ho implementato una versione col qsort ottengo solo 30.02 punti 
il codice è questo:
#include
#include
#include
#define MAXN 100000
long long int F[MAXN] = {0};
long long int P[MAXN] = {0};
long long int Res[MAXN] = {0};
int N;
int K;
FILE *in,*out;
int cmp(const void *a, const void *b){
return *(int*)b-*(int*)a;
}
int main(){
in = fopen("input.txt","r");
out = fopen("output.txt","w");
fscanf(in,"%d %d",&N,&K);
for( int i = 0; i < N; i++ ){
fscanf(in,"%lli %lli",&F[i],&P[i]);
Res[i] = F[i] - 3*P[i]/2;
Res[i] = Res[i]*(N) + i ;
}
qsort(Res,N,sizeof(long long int),cmp);
for( int i = 0; i < K; i++ )
fprintf(out,"%d\n",Res[i]%(N)+1);
fclose(in);fclose(out);
return 0;
}
Ho salvato l’indice dentro al numero di Res che equivale a F[i] - (3/2)P[i]. Ho utilizzato il long long per essere sicuri che Res*= N ci stasse fra i valori ma ottengo comunque un risultato basso, qualcuno mi può dare una mano ?

ho fatto 100/100, l’ho risolto con le strutture, speravo che si potesse fare anche senza, non mi sono mai messo a impararle come si deve 