1) Проблемы со скоростью (да, я слышал, что у джавы хороший JIT, но за 1 секунду он не успеет соптимизировать).
2) Не получится делать хаки по типу __gnu_pbds::tree, вышеприведенного аллокатора.
3) В случае джавы - нужны доп.хаки типа кастомного считывания.
4) Ну и без хороших дженериков жизнь в целом становится сложнее. Например, когда я пишу ДО, я делаю в нем функцию типа
template<typename F>
void go(Node* cur, ..., F const& func)
Которая спускается по вершинам ДО и запускает заданный коллбек от каждой вершины запроса. Все операции с ДО, в том числе массовые, выражаются через go(), например
void add(size_t i, int x) {
go(i, i+1, [&](Node* v) {v->val += x;});
}
И это не тормозит, потому что (не проверял, но уверен) компилятор инлайнит эту лямбду в одну функцию.
В го так точно не пройдет. В джаве - не факт, что за секунду jit догадается и заинлайнит.