[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: ...
随机推荐
- Redis创建集群报错
Redis创建集群报错: 1:任何一个集群节点中都不能存在数据,如果有备份一下删除掉aof文件或rdb文件 2: nodes-集群端口.conf 文件存的会有报错记录,所以该文件也要删除
- ajax beforeSend 写的显示隐藏代码不执行
ajax如果要写像下方格式 $.ajax({ url: ajaxurl, type: 'POST', dataType: 'json', async:true, data: { }, beforeSe ...
- Centos7上实现不同网段的服务器文件共享
目的:实现不同网段的服务器实现文件共享 前提:服务器1可以和共享服务器互通,共享服务器和服务器2互通 拓扑如下: 思路: 一般文件共享有涉及windown系统的用samba,纯类centos系统就用n ...
- 金蝶核算项目余额表卡号余额与天财商龙CRM卡号余额对比
金蝶核算项目余额表卡号余额与天财尚龙CRM卡号余额对比 由于历史遗留问题,财务一直不调账,修改核算科目卡号与天财商龙CRM系统一直,只能用VBA把卡号前缀修改成两边一致. 再通过,Power BI D ...
- Http系列笔记
万能的HttpClient (Framework与NetCore 都支持) string url = "http://localhost:5000/api/values"; //p ...
- [转] babel的使用
一.配置文件.babelrc .babelrc 文件存放在项目的根目录下. { "presets": [], "plugins": [] } presets 字 ...
- admin密码对应的MD5值
admin密码对应的MD5值,16位和32位 admin密码对应的MD5值,16位和32位 admin的md5值是多少,常用密码加密md5值,123456,admin,admin888 如果遇到MD5 ...
- Codeforces 633F The Chocolate Spree 树形dp
The Chocolate Spree 对拍拍了半天才知道哪里写错了.. dp[ i ][ j ][ k ]表示在 i 这棵子树中有 j 条链, 是否有链延伸上来. #include<bits/ ...
- 关于window.open窗口的resize事件
jQuery 事件 - resize() 方法 当调整浏览器窗口的大小时,发生 resize 事件. resize() 方法触发 resize 事件,或规定当发生 resize 事件时运行的函数. & ...
- BZOJ4319 cerc2008 Suffix reconstruction 字符串 SA
原文链接http://www.cnblogs.com/zhouzhendong/p/9016336.html 题目传送门 - BZOJ4319 题意 给出一个$1,2,\cdots,n$的排列,第$i ...