Language: C++

#include<bits/stdc++.h>
using namespace std;
#define all(v) v.begin(), v.end()
using in = int64_t;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define REP(i,a,b) for(int i=(int)(a);i<(int)(b);i++)
#define Yes cout<<"Yes"<<endl 
#define No cout<<"No"<<endl
#define yes cout<<"yes"<<endl 
#define no cout<<"no"<<endl
#define vec(a,y,x)  vector<vector<char>> a (y,vector<char>(x))
const double PI=3.14159265358979323846;
const in MOD = 1000000007;
const in INF=1e18+7;
const int inf=1e9+7;
const vector<int> dx={1,0,-1,0};
const vector<int> dy={0,1,0,-1};

int main(){
  int n,k;
  cin>>n>>k;
  vector<pair<int,int>> a(n);
  in ans=1;
  
  rep(i,n){
    in num;
    cin>>num;
    if(num<0) a.at(i).second=-1;
    else a.at(i).second=1;
    num=fabs(num);
    a.at(i).first=num;
  }
  
  
  sort(all(a));
  reverse(all(a));
  int hugo=1;
  rep(i,k)
    hugo*=a.at(i).second;
  if(hugo>0){
    rep(i,k){
      ans*=a.at(i).first;
      ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  int numb=0;//目印
  int meji2=n,numb2=-1;
  
  for(int k-1;i>=0;i--){
    if(a.at(i).second<0){
      numb = i;
      break;
    }
  }
  for(int k-1;i>=0;i--){
    if(a.at(i).second>0){
      numb2 = i;
      break;
    }
  }
  int meji=n;//印
  for(int i = k;i<n;i++){
    if(a.at(i).second>0){
      meji=i;
      break;
    }    
  }
  int meji=n;//印
  for(int i = k;i<n;i++){
    if(a.at(i).second>0){
      meji2=i;
      break;
    }    
  }
  
  if(n==k){
    /*in h = a.at(meji);
    a.at(meji)=a.at(numb);
    a.at(numb)=h;*/
    rep(i,k){
      ans*=a.at(i).first;
      ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  if(k==1){
    ans=INF;
    rep(i,n){
      if(ans<a.at(i).first*a.at(i)*second)
        ans=a.at(i).first*a.at(i)*second;
    }
    cout<<ans<<endl;
    return 0;
  }
  
  if(numb2!=-1&&meji2!=n&&meji!=n){
    in a,b;
    a=a.at(meji).first/a.at(numb).first;
    b=a.at(meji2).first/a.at(numb2).first;
    if(a<b){
      in h = a.at(meji2);
      a.at(meji2)=a.at(numb2);
      a.at(numb2)=h;
    }
    else{
      in h = a.at(meji);
      a.at(meji)=a.at(numb);
      a.at(numb)=h;
    }
    rep(i,k){
      ans*=a.at(i).first;
      ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  if(numb2==-1&&meji==n){
    rep(i,k){
      ans*=a.at(n-i-1).first;
      ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  
  if(meji2==n||numb2==-1){
    in h = a.at(meji);
    a.at(meji)=a.at(numb);
    a.at(numb)=h;
    rep(i,k){
      ans*=a.at(i).first;
      ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  if(meji==n){
    in h = a.at(meji2);
    a.at(meji2)=a.at(numb2);
    a.at(numb2)=h;
    rep(i,k){
    ans*=a.at(i).first;
    ans=ans%MOD;
    }
    cout<<ans<<endl;
    return 0;
  }
  
}

Compiler output:
a.cc: In function 'int main()':
a.cc:51:12: error: expected ';' before '-' token
   51 |   for(int k-1;i>=0;i--){
      |            ^
      |            ;
a.cc:51:15: error: 'i' was not declared in this scope
   51 |   for(int k-1;i>=0;i--){
      |               ^
a.cc:51:19: error: expected ')' before ';' token
   51 |   for(int k-1;i>=0;i--){
      |      ~            ^
      |                   )
a.cc:51:20: error: 'i' was not declared in this scope
   51 |   for(int k-1;i>=0;i--){
      |                    ^
a.cc:57:12: error: expected ';' before '-' token
   57 |   for(int k-1;i>=0;i--){
      |            ^
      |            ;
a.cc:57:19: error: expected ')' before ';' token
   57 |   for(int k-1;i>=0;i--){
      |      ~            ^
      |                   )
a.cc:70:7: error: redeclaration of 'int meji'
   70 |   int meji=n;//印
      |       ^~~~
a.cc:63:7: note: 'int meji' previously declared here
   63 |   int meji=n;//印
      |       ^~~~
a.cc:92:27: error: no match for 'operator*' (operand types are 'int' and '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'})
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |              ~~~~~~~~~~~~~^~~~~~~~
      |                      |         |
      |                      int       __gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type {aka std::pair<int, int>}
In file included from /usr/include/c++/14/ccomplex:39,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:127,
                 from a.cc:1:
/usr/include/c++/14/complex:400:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const complex<_Tp>&, const complex<_Tp>&)'
  400 |     operator*(const complex<_Tp>& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:400:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::complex<_Tp>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/complex:409:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const complex<_Tp>&, const _Tp&)'
  409 |     operator*(const complex<_Tp>& __x, const _Tp& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:409:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::complex<_Tp>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/complex:418:5: note: candidate: 'template<class _Tp> std::complex<_Tp> std::operator*(const _Tp&, const complex<_Tp>&)'
  418 |     operator*(const _Tp& __x, const complex<_Tp>& __y)
      |     ^~~~~~~~
/usr/include/c++/14/complex:418:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'} is not derived from 'const std::complex<_Tp>'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
In file included from /usr/include/c++/14/valarray:605,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:166:
/usr/include/c++/14/bits/valarray_after.h:407:5: note: candidate: 'template<class _Dom1, class _Dom2> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_Expr, std::_Expr, _Dom1, _Dom2>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const _Expr<_Dom1, typename _Dom1::value_type>&, const _Expr<_Dom2, typename _Dom2::value_type>&)'
  407 |     _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:407:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/bits/valarray_after.h:407:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_Expr, std::_Constant, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const _Expr<_Dom1, typename _Dom1::value_type>&, const typename _Dom::value_type&)'
  407 |     _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:407:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/bits/valarray_after.h:407:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_Constant, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const typename _Dom::value_type&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  407 |     _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:407:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/bits/valarray_after.h:407:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_Expr, std::_ValArray, _Dom, typename _Dom::value_type>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const _Expr<_Dom1, typename _Dom1::value_type>&, const valarray<typename _Dom::value_type>&)'
  407 |     _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:407:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::_Expr<_Dom1, typename _Dom1::value_type>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/bits/valarray_after.h:407:5: note: candidate: 'template<class _Dom> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_ValArray, std::_Expr, typename _Dom::value_type, _Dom>, typename std::__fun<std::__multiplies, typename _Dom1::value_type>::result_type> std::operator*(const valarray<typename _Dom::value_type>&, const _Expr<_Dom1, typename _Dom1::value_type>&)'
  407 |     _DEFINE_EXPR_BINARY_OPERATOR(*, struct std::__multiplies)
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/valarray_after.h:407:5: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'} is not derived from 'const std::_Expr<_Dom1, typename _Dom1::value_type>'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/valarray:1198:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_ValArray, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const valarray<_Tp>&, const valarray<_Tp>&)'
 1198 | _DEFINE_BINARY_OPERATOR(*, __multiplies)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1198:1: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::valarray<_Tp>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/valarray:1198:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_ValArray, std::_Constant, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const valarray<_Tp>&, const typename valarray<_Tp>::value_type&)'
 1198 | _DEFINE_BINARY_OPERATOR(*, __multiplies)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1198:1: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   mismatched types 'const std::valarray<_Tp>' and 'int'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
/usr/include/c++/14/valarray:1198:1: note: candidate: 'template<class _Tp> std::_Expr<std::__detail::_BinClos<std::__multiplies, std::_Constant, std::_ValArray, _Tp, _Tp>, typename std::__fun<std::__multiplies, _Tp>::result_type> std::operator*(const typename valarray<_Tp>::value_type&, const valarray<_Tp>&)'
 1198 | _DEFINE_BINARY_OPERATOR(*, __multiplies)
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/valarray:1198:1: note:   template argument deduction/substitution failed:
a.cc:92:34: note:   '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'} is not derived from 'const std::valarray<_Tp>'
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                  ^
a.cc:92:36: error: 'second' was not declared in this scope
   92 |       if(ans<a.at(i).first*a.at(i)*second)
      |                                    ^~~~~~
a.cc:93:26: error: no match for 'operator*' (operand types are 'int' and '__gnu_cxx::__alloc_traits<std::allocator<std::pair<int, int> >, std::pair<int, int> >::value_type' {aka 'std::pair<int, int>'})
   93 |         ans=a.at(i).first*a.at(i)*second;
      |             ~~~~~~~~~~~~~^~~~~~~~
      |                     |         |
      |                     int       __gnu_cxx::__alloc_traits<std::allocator