stelle gerade fest:

die float (double) arrays müssen USHRT_MAX+1 groß sein ( == exakt 2^16 ),
für SHRT_MAX soll es so bleiben.

SHRT_MAX und USHRT_MAX sind C-Konstanten, die brauchst du nicht mehr definieren
(oder wir verwenden explizit 32767, 65536)

http://www.cplusplus.com/reference/climits/


und bitte auch möglichst nirgends int oder unsigned int verwenden, immer nur int32_t und uint32_t

das gleiche gilt für char und unsigned char (stattdessen möglichst int8_t, uint8_t)



in main steht immer noch

vector<int> input;

das müsste dann auch zu
int32_t input[SHRT_MAX]
werden