To są drobne, raczej kosmetyczne poprawki, niż wielkie optymalizacje.
Można od razu:
for (int i = k; i < n; i += k)
/// w C++14..20 można też
for (auto i{k}; i < n; i += k)
można użyć domyślnego sortowania - i wtedy niepotrzebna funkcja por (<-- słaba nazwa) i iterować od końca:
sort (t, t + n);
for (auto i{n-k}; i >= 0; i -= k)
W C++ cstdio, a nie stdio.h
Ani w C ani w C++ nie jest poprawnie:
int t[n];
Można użyć int t[1000001]
lub new
lub wektora:
vector <int> t(n)
Następne lepiej:
typedef unsigned long long ULL;
niż
#define ....
Ale warto potem użyć gdzieś ULL. Jeżeli nie to to jest niepotrzebny śmieć.
W C++ warto używać cin/cout, a nie scanf/printf - nawet kosztem wolniejszego programu.
A jeżeli chcesz koniecznie szybko to można/trzeba użyć funkcji z przyrostkiem _unlocked - fast i/o