Language: C++

#include <iostream>
#include <string>
#include <vector>
#include <cmath>
using namespace std;

int main(){
    
    long long int i, N, K, ans, T;
    cin >> N >> K;
    ans = 1;
    T = 1000000007;
    
    vector< long long int > A(N);
    vector< long long int > B;
    
    for (i = 0; i < N; i++){
        cin >> A[i];
    }
    
    sort(A.begin(), A.end(), greater<int>());
    
    i = 0;
    
    for (i = N - 1; i >= 0; i--){
        if (A[i] >= 0) break;
        
        B.push_back(A[i]);
        A.pop_back();
    }
    
    if (N == K){
        
        for (i = 0; i < N; i++){
            
            ans *= A[i];
            ans %= T;
        }
        
        if (ans < 0) ans += T;
        cout << ans << "\n";
        return 0;
    }
    
    if (K % 2 == 0){
        
        for ( i = 0; i < K; i += 2){
            
            if (A.size() < 2){
                
                ans *= B[0];
                ans %= T;
                ans *= B[1];
                ans %= T;
                B.erase(B.begin());
                B.erase(B.begin());
                
            } else if (B.size() < 2){
                
                ans *= A[0];
                ans %= T;
                ans *= A[1];
                ans %= T;
                A.erase(A.begin());
                A.erase(A.begin());
                
            } else if (A[0] * A[1] > B[0] * B[1]){
                
                ans *= A[0];
                ans %= T;
                ans *= A[1];
                ans %= T;
                A.erase(A.begin());
                A.erase(A.begin());
                
            } else if (A[0] * A[1] <= B[0] * B[1]){
                
                ans *= B[0];
                ans %= T;
                ans *= B[1];
                ans %= T;
                B.erase(B.begin());
                B.erase(B.begin());
                
            } else if {
                cout << "error" << "\n";
                return 0;
            }
            
        }
        
    } else if (A.size() == 0){
        
        for (i = B.size() - 1; i > B.size() - 1  - K; i--){
            
            ans *= B[i];
            ans %= T;
        }

        if (ans < 0) ans += T;
        cout << ans << "\n";
        return 0;
        
    } else {
        
        ans = A[0];
        A.erase(A.begin());
        K -= 1;
        
        for ( i = 0; i < K; i += 2){
            
            if (A.size() < 2){
                
                ans *= B[0];
                ans %= T;
                ans += B[1];
                ans %= T;
                B.erase(B.begin());
                B.erase(B.begin());
                
            } else if (B.size() < 2){
                
                ans *= A[0];
                ans %= T;
                ans += A[1];
                ans %= T;
                A.erase(A.begin());
                A.erase(A.begin());
                
            } else if (A[0] * A[1] > B[0] * B[1]){
                
                ans *= A[0];
                ans %= T;
                ans += A[1];
                ans %= T;
                A.erase(A.begin());
                A.erase(A.begin());
                
            } else {
                
                ans *= B[0];
                ans %= T;
                ans += B[1];
                ans %= T;
                B.erase(B.begin());
                B.erase(B.begin());
                
            }
            
        }
        
    }


    if (ans < 0) ans += T;
    cout << ans << "\n";

return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:21:5: error: 'sort' was not declared in this scope; did you mean 'sqrt'?
   21 |     sort(A.begin(), A.end(), greater<int>());
      |     ^~~~
      |     sqrt
a.cc:85:23: error: expected '(' before '{' token
   85 |             } else if {
      |                       ^
      |                       (