Dobrze, że masz AC i że usuniesz zaraz kod, bo tak namotałeś, że tylko autor [TY] wie o co w nim chodzi
Więc tylko kilka rad:
1. Zamiast while (d<D) , możesz użyć: while (D--),
w pętli nie potrzebujesz wartości ani d ani D
2. Nie musisz zerować tablicy - wczytywanie i tak zastępuje wcześniejszą wartość
3. Zamiast [przy wypisywaniu]: for (int j=0;punkty[j]!=0;j++) możesz:
for (int j = 0; j < N; j++)
4. Po prostu można posortować i wypisać, twój program pewnie to robi
ale strasznie zawile i trudno to sprawdzić