```plain
5 5
-1 2 -3 4 -5
```
?
by installb @ 2020-07-06 11:13:22
```cpp
#include<bits/stdc++.h>
#define mod 1000000007
using namespace std;
long long sum = 1;
int a[200005],flag = 0;
bool cmp(int a,int b) {
return abs(a) > abs(b);
}
int main() {
int n,k; scanf("%d%d",&n,&k);
for(int i = 1;i <= n;i ++) {
scanf("%d",&a[i]);
if(a[i] > 0) flag = 1;
}
if(n == k) {
long long sum = 1;
for(int i = 1;i <= n;i ++) {
sum = (sum * a[i]) % mod;
}
printf("%lld\n",sum);
return 0;
}
sort(a + 1,a + n + 1,cmp);
if(flag == 0) {
long long sum = 1;
for(int i = n;i >= n - k + 1;i --) {
sum = (sum * a[i]) % mod;
}
printf("%lld\n",sum % mod);
return 0;
}
int fs = 0;
for(int i = 1;i <= k;i ++) {
if(a[i] < 0) {
fs ++;
}
}
if(fs % 2 == 0) {
for(int i = 1;i <= k;i ++) {
sum = (sum * a[i]) % mod;
}
printf("%lld\n",sum % mod);
}
else {
long long maxl = -mod;
int pfs,pzs = 200005;
for(int i = k;i >= 1;i --) {
if(a[i] < 0) {
pfs = i;
break;
}
}
for(int i = k + 1;i <= n;i ++) {
if(a[i] > 0) {
pzs = i;
break;
}
}
if(pzs != 200005) {
for(int i = 1;i <= k;i ++) {
if(i == pfs) {
sum = (sum * a[pzs]) % mod;
}
else {
sum = (sum * a[i]) % mod;
}
}
maxl = max(maxl,sum % mod);
}
pfs = pzs = 200005;
sum = 1;
for(int i = k;i >= 1;i --) {
if(a[i] > 0) {
pzs = i;
break;
}
}
for(int i = k + 1;i <= n;i ++) {
if(a[i] < 0) {
pfs = i;
break;
}
}
if(pfs != 200005 && pzs != 200005) {
for(int i = 1;i <= k;i ++) {
if(i == pzs) {
sum = (sum * a[pfs]) % mod;
}
else {
sum = (sum * a[i]) % mod;
}
}
maxl = max(maxl,sum % mod);
}
printf("%lld\n",maxl);
}
return 0;
}
```
by shitbro @ 2020-07-06 11:14:48
@[installb](/user/31440) 现在对了
by shitbro @ 2020-07-06 11:15:20