Language: C++

#ifndef LOCAL
#pragma GCC optimize("O3")
#endif
#include "bits/stdc++.h"
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
#include <ext/pb_ds/detail/standard_policies.hpp>
using namespace std;
using namespace __gnu_pbds;
#define sim template < class c
#define int long long
#define ris return * this
#define dor > debug & operator <<
#define eni(x) sim > typename \
  enable_if<sizeof dud<c>(0) x 1, debug&>::type operator<<(c i) {
sim > struct rge { c b, e; };
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c* x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
~debug() { cerr << '\n'; }
eni(!=) cerr << boolalpha << i; ris; }
eni(==) ris << range(begin(i), end(i)); }
sim, class b dor(pair < b, c > d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
    *this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
sim dor(const c&) { ris; }
#endif
};
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define fastio ios_base::sync_with_stdio(false);cin.tie(0);
typedef tree< pair<int,int>, null_type, less<pair<int,int> >, rb_tree_tag, tree_order_statistics_node_update> ordered_set;
typedef long long ll;
const ll MOD = 1e9 + 7 ;
const ll N = 2e5 + 10 ;
const ll INF = 1e18 + 10 ;
int fix(int x){
    return ( x % MOD + MOD ) % MOD ;
}
signed main(){
    fastio
    int n , k ;
    cin >> n >> k ;
    vector<int> pos , neg ;
    bool zero = false ;
    for(int i = 0; i < n; i++){
        int x ;
        cin >> x; 
        if ( x == 0 ) zero = true ;
        if ( x > 0 ) pos.emplace_back(x) ;
        else neg.emplace_back(x) ;
    }
    sort(pos.rbegin(), pos.rend()) ;
    sort(neg.begin(), neg.end()) ;
    debug() << imie(pos.size());
    vector<int> first((int)pos.size() + 1, 1) ; // high
    vector<int> second((int) pos.size() + 1, 1) ; // low
    vector<int> negHigh((int)neg.size() + 1, 1) ; // high
    vector<int> negLow((int)neg.size() + 1, 1) ; // low
    for(int i = 1; i < neg.size() + 1; i++){
        negHigh[i] = negHigh[i - 1] * neg[i - 1] ; 
        negHigh[i] = fix(negHigh[i]) ;
    }
    reverse(neg.begin(), neg.end()) ;
    for(int i = 1; i < neg.size() + 1; i++){
        negLow[i] = negLow[i - 1] * neg[i - 1] ; 
        negLow[i] = fix(negLow[i]) ;
    }
    for(int i = 1; i < pos.size() + 1; i++){
        first[i] = first[i - 1] * pos[i - 1] ;
        first[i] = fix(first[i]) ;
    }
    reverse(pos.begin(), pos.end()) ;
    for(int i = 1; i < pos.size() + 1; i++){
        second[i] = second[i - 1] * pos[i - 1] ;
        second[i] = fix(second[i]) ;
    }
    int ans = -INF ;
    int bestneg = -INF ;
    bool flag = false ;
    for(int i = 0; i < first.size() ; i++){
        debug() << imie(i) ;
        int curHigh = first[i] ;
        int curLow = second[i] ;
        int rem = k - i ; 
        if ( rem >= 0 && rem < negHigh.size() ){
            debug() << imie(negHigh[rem]) ;
            debug() << imie(negLow[rem]) ;
            if ( (rem & 1) ){
                debug() << imie(i) "test" ;
                bestneg = max(bestneg, curLow * negLow[rem]) ;
            }
            else {
                debug() << imie(curHigh) ;
                ans = max(ans, curHigh * negHigh[rem]); 
                flag = true ;
            }
        }
        debug() << imie(ans) ;
    }
    if ( flag ) {
        if ( zero )
            cout << max(0,fix(ans)) << endl;
        else cout << fix(ans) << endl ;

    }
    else{
        if ( zero ) cout << 0 << endl  ;
        else cout << fix(bestneg) << endl  ;
    } 
    return 0; 
}

Compiler output:
a.cc: In function 'int main()':
a.cc:111:24: error: no matching function for call to 'max(int, long long int)'
  111 |             cout << max(0,fix(ans)) << endl;
      |                     ~~~^~~~~~~~~~~~
In file included from /usr/include/c++/14/algorithm:60,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:51,
                 from a.cc:4:
/usr/include/c++/14/bits/stl_algobase.h:257:5: note: candidate: 'template<class _Tp> constexpr const _Tp& std::max(const _Tp&, const _Tp&)'
  257 |     max(const _Tp& __a, const _Tp& __b)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:257:5: note:   template argument deduction/substitution failed:
a.cc:111:24: note:   deduced conflicting types for parameter 'const _Tp' ('int' and 'long long int')
  111 |             cout << max(0,fix(ans)) << endl;
      |                     ~~~^~~~~~~~~~~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note: candidate: 'template<class _Tp, class _Compare> constexpr const _Tp& std::max(const _Tp&, const _Tp&, _Compare)'
  303 |     max(const _Tp& __a, const _Tp& __b, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algobase.h:303:5: note:   candidate expects 3 arguments, 2 provided
In file included from /usr/include/c++/14/algorithm:61:
/usr/include/c++/14/bits/stl_algo.h:5706:5: note: candidate: 'template<class _Tp> constexpr _Tp std::max(initializer_list<_Tp>)'
 5706 |     max(initializer_list<_Tp> __l)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5706:5: note:   candidate expects 1 argument, 2 provided
/usr/include/c++/14/bits/stl_algo.h:5716:5: note: candidate: 'template<class _Tp, class _Compare> constexpr _Tp std::max(initializer_list<_Tp>, _Compare)'
 5716 |     max(initializer_list<_Tp> __l, _Compare __comp)
      |     ^~~
/usr/include/c++/14/bits/stl_algo.h:5716:5: note:   template argument deduction/substitution failed:
a.cc:111:24: note:   mismatched types 'std::initializer_list<_Tp>' and 'int'
  111 |             cout << max(0,fix(ans)) << endl;
      |                     ~~~^~~~~~~~~~~~