题目大意:

n个数 选k个使和为奇数且最大

思路:

可以先将这n个数排序

然后先去最大的k个数 若和为奇数则直接输出

为偶数可以用没选的最大的奇数替换选了的最小的偶数或用没选的最大的偶数替换选了的最小的奇数

预处理出4个数组即可

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define inf 2139062143
#define MAXN 1001000
using namespace std;
inline ll read()
{
ll x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) x=x*+ch-'',ch=getchar();
return x*f;
}
ll n,a[MAXN],T,sum[MAXN],mn[MAXN][],mx[MAXN][];
int main()
{
n=read();ll x,res;
for(ll i=;i<=n;i++) a[i]=read();
sort(a+,a+n+);
for(ll i=;i<=n;i++) sum[i]=sum[i-]+a[i];
for(ll i=;i<=n;i++) mx[i][a[i]&]=a[i],mx[i][(a[i]&)^]=mx[i-][(a[i]&)^];
mn[n+][]=mn[n+][]=inf;
for(ll i=n;i>=;i--) mn[i][a[i]&]=a[i],mn[i][(a[i]&)^]=mn[i+][(a[i]&)^];
T=read();
while(T--)
{
x=read();
res=sum[n]-sum[n-x];
if(res&) {printf("%lld\n",res);continue ;}
res=-;
if(mn[n-x+][]!=inf&&mx[n-x][]) res=sum[n]-sum[n-x]-mn[n-x+][]+mx[n-x][];
if(mn[n-x+][]!=inf&&mx[n-x][]) res=max(res,sum[n]-sum[n-x]-mn[n-x+][]+mx[n-x][]);
printf("%lld\n",res);
}
}

最新文章

  1. ES6新特性:Javascript中内置的延迟对象Promise
  2. ASP.NET 小白从零开始建站简易教程 (一)域名、虚拟主机、FTP上传文件
  3. SAP Business One SAP B1功能概述
  4. C代码中如何调用C++ C++中如何调用C
  5. nginx下禁止访问robots.txt的设置方法
  6. 谈&ldquo;技术含量&rdquo;的问题
  7. expdp impdp中 exclude/include 的使用
  8. ubuntu多网卡绑定
  9. Jquery 遍历表单 AJAX提交
  10. Flash Activex NPAPI PPAPI 各种网页插件完整安装包下载地址
  11. HDOJ/HDU 1251 统计难题(字典树啥的~Map水过)
  12. The server quit without updating PID file (mysql.pid)一次意外mysql停止运行备忘录
  13. nginx上传模块nginx_upload_module使用
  14. JQuery5.04获取
  15. nginx版本如何选择?
  16. 将对象xml序列化和反序列化
  17. asp.net的Request.ServerVariables参数说明
  18. shell脚本简介
  19. Luogu5021 [NOIP2018]赛道修建
  20. hive安装详解

热门文章

  1. Vue指令5:v-if
  2. [Algorithm] 9. Two Sum
  3. idea必选配置
  4. linux的ssh相关指令
  5. buf.readInt8()
  6. mysql批量替换某个字段的部分内容
  7. LVS集群的三种工作模式
  8. 2.8 补充:export
  9. Spring 获取当前activeProfile
  10. Intellij IDEA神器居然还有这些小技巧---超级好用的