[PA2014]Bazarek
[PA2014]Bazarek
题目大意:
有\(n(n\le10^6)\)件商品,\(m(m\le10^6)\)次询问。每次询问若选出其中的\(k\)个,要求它们的总价为奇数,求最大可能的总价。
思路:
从大到小排序取前\(k\)个,若不是奇数就去掉已选最小偶数/奇数再加上未选最大奇数/偶数。
源代码:
#include<cstdio>
#include<cctype>
#include<algorithm>
#include<functional>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
typedef long long int64;
const int N=1e6+1;
int64 a[N],min[N][2],max[N][2];
int main() {
const int n=getint();
for(register int i=1;i<=n;i++) {
a[i]=getint();
}
std::sort(&a[1],&a[n]+1,std::greater<int64>());
for(register int i=1;i<=n;i++) {
if(i!=1) {
min[i][0]=min[i-1][0];
min[i][1]=min[i-1][1];
}
min[i][a[i]&1]=a[i];
}
for(register int i=n;i>=1;i--) {
if(i!=n) {
max[i][0]=max[i+1][0];
max[i][1]=max[i+1][1];
}
max[i][a[i]&1]=a[i];
}
for(register int i=1;i<=n;i++) {
a[i]+=a[i-1];
}
const int m=getint();
for(register int i=0;i<m;i++) {
const int k=getint();
if(a[k]&1) {
printf("%lld\n",a[k]);
continue;
}
int64 ans=0;
if(k!=n&&min[k][0]&&max[k+1][1]) {
ans=std::max(ans,a[k]-min[k][0]+max[k+1][1]);
}
if(k!=n&&min[k][1]&&max[k+1][0]) {
ans=std::max(ans,a[k]-min[k][1]+max[k+1][0]);
}
printf("%lld\n",ans?:-1);
}
return 0;
}
[PA2014]Bazarek的更多相关文章
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 3721: PA2014 Final Bazarek
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 645 Solved: 261[Submit][ ...
- 【BZOJ3721】PA2014 Final Bazarek 贪心
[BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n ...
- bzoj3721 [PA2014 Final] Bazarek
Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数 ...
- 【贪心】bzoj3721 PA2014 Final Bazarek
考虑不限制奇偶的情况,那就是直接排序取前k个的和. 加上奇偶限制:若排序后的前k个的和是偶数,则“显然地”:将其中的最小的奇数替换成未被选择的数中最大的偶数 或者 将其中的最小的偶数替换成未被选择的数 ...
- BZOJ 3721: PA2014 Final Bazarek【乱搞】
有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范 ...
- bzoj 3721: PA2014 Final Bazarek 贪心
如果没有限制,直接取前 $k$ 大即可. 有限制,则只有几种可能:奇换偶,偶换奇. 维护奇数偶数的前缀最小值和后缀最大值即可. code: #include <bits/stdc++.h> ...
- 【BZOJ-3721】Final Bazarek 贪心
3721: PA2014 Final Bazarek Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 610 Solved: 243[Submit][ ...
- BZOJ 3709: [PA2014]Bohater
3709: [PA2014]Bohater Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1050 Solved: ...
随机推荐
- java获取当前时间精确到毫秒
转载:http://af8991.iteye.com/blog/1217672 import java.text.SimpleDateFormat; import java.util.Date; im ...
- 微信jssdk分享功能开发
先理解下分享: 在app端 ,经常能看见 分享按钮的功能,(分享给朋友,分享到朋友圈,分享到QQ空间等等): https://open.weixin.qq.com/(微信开发平台),这需要到开放平台注 ...
- Mongodb for .Net Core 驱动的应用
一:我在做.net core 应用mongodb的sdk时,查阅了不少资料,故记录下来,以方便查阅.mongodb类库的版本 mongodb driver 2.4.3,一下方法均来自此版本文件 先看看 ...
- Kubeadm安装的K8S集群1年证书过期问题的解决思路
这个问题,很多使用使用kubeadm的用户都会遇到. 网上也有类似的帖子,从源代码编译这种思路, 在生产环境,有些不现实. 还是使用kubeadm的命令操作,比较自然一点. 当然,自行生成一套证书,也 ...
- 【C#】WebApi 添加过滤器,实现对请求参数和响应内容的日志记录
filter的介绍 filter在Web API中经常会用到,主要用于记录日志,安全验证,全局错误处理等:Web API提供两种过滤器的基本类型:actionfilterattribute,excep ...
- Coolpy开源项目简介
1.Coolpy初识 基于ARDUINO的迷你操作系统.只需一个ARDUINO主板+Ethernet Shield即可运行.成本低,Coolpy主件以目前淘宝价只需要76元人民币. 2.Coolpy能 ...
- ERROR 000732:Output Geodatabase:Dataset Database Connections\Connection to localhost.sde\SDE.Dataset does not exist or is not supported
ArcCatalog 10中向SDE 数据集导入要素类时,出错:ERROR 000732:Output Geodatabase:Dataset Database Connections\Connect ...
- springmvc 无法访问静态资源
没有配置<mvc:resources location="/" mapping="/**"/> <?xml version="1.0 ...
- 老虎ji 剪枝模拟
Problem Description “在赌场里,基本原则就是让他们玩下去以及让他们再来玩.他们玩得越久,他们会输的越多,最后,我们会得到一切.”(摘自1995年的电影Casino) 你正在一家赌场 ...
- 2013年蓝桥杯省赛C/C++A组真题解析
1.高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的 ...