如果没有限制,直接取前 $k$ 大即可.

有限制,则只有几种可能:奇换偶,偶换奇.

维护奇数偶数的前缀最小值和后缀最大值即可.

code:

  1. #include <bits/stdc++.h>
  2. #define N 1000005
  3. #define LL long long
  4. #define inf 2000000000
  5. using namespace std;
  6. namespace IO
  7. {
  8. char *p1,*p2,buf[100000];
  9. #define nc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++)
  10. int rd() {int x=0; char c=nc(); while(c<48) c=nc(); while(c>47) x=(((x<<2)+x)<<1)+(c^48),c=nc(); return x;}
  11. };
  12. void setIO(string s)
  13. {
  14. string in=s+".in";
  15. freopen(in.c_str(),"r",stdin);
  16. }
  17. LL a[N],f0[N],f1[N],g0[N],g1[N],sum[N];
  18. bool cmp(LL a,LL b) { return a>b; }
  19. int main()
  20. {
  21. // setIO("input");
  22. int n,i,j,m;
  23. scanf("%d",&n);
  24. for(i=1;i<=n;++i) a[i]=(LL)IO::rd();
  25. sort(a+1,a+1+n,cmp);
  26. f0[0]=f1[0]=inf;
  27. for(i=1;i<=n;++i)
  28. {
  29. sum[i]=sum[i-1]+a[i];
  30. f0[i]=f0[i-1],f1[i]=f1[i-1];
  31. if(a[i]%2==0) f0[i]=a[i];
  32. else f1[i]=a[i];
  33. }
  34. g0[n]=g1[n]=-inf;
  35. for(i=n-1;i>=1;--i)
  36. {
  37. g0[i]=g0[i+1],g1[i]=g1[i+1];
  38. if(a[i+1]%2==0) g0[i]=a[i+1];
  39. else g1[i]=a[i+1];
  40. }
  41. m=IO::rd();
  42. for(i=1;i<=m;++i)
  43. {
  44. int k;
  45. k=IO::rd();
  46. if(sum[k]&1) printf("%lld\n",sum[k]);
  47. else
  48. {
  49. LL ans=0ll;
  50. if(f0[k]!=inf&&g1[k]!=-inf) ans=max(ans,sum[k]-f0[k]+g1[k]);
  51. if(f1[k]!=inf&&g0[k]!=-inf) ans=max(ans,sum[k]-f1[k]+g0[k]);
  52. if(!ans) printf("-1\n");
  53. else printf("%lld\n",ans);
  54. }
  55. }
  56. return 0;
  57. }

  

bzoj 3721: PA2014 Final Bazarek 贪心的更多相关文章

  1. BZOJ 3721: PA2014 Final Bazarek

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 645  Solved: 261[Submit][ ...

  2. BZOJ 3721: PA2014 Final Bazarek【乱搞】

    有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数,表示每件商品的价格,范 ...

  3. 【BZOJ3721】PA2014 Final Bazarek 贪心

    [BZOJ3721]PA2014 Final Bazarek Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n ...

  4. 【BZOJ-3721】Final Bazarek 贪心

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 610  Solved: 243[Submit][ ...

  5. bzoj 3722: PA2014 Final Budowa

    3722: PA2014 Final Budowa Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 303  Solved: 108[Submit][St ...

  6. 【贪心】bzoj3721 PA2014 Final Bazarek

    考虑不限制奇偶的情况,那就是直接排序取前k个的和. 加上奇偶限制:若排序后的前k个的和是偶数,则“显然地”:将其中的最小的奇数替换成未被选择的数中最大的偶数 或者 将其中的最小的偶数替换成未被选择的数 ...

  7. bzoj3721 [PA2014 Final] Bazarek

    Description 有n件商品,选出其中的k个,要求它们的总价为奇数,求最大可能的总价. Input 第一行一个整数n(1<=n<=1000000),表示商品数量.接下来一行有n个整数 ...

  8. BZOJ 3709 [PA2014]Bohater:贪心【反过来考虑】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3709 题意: 在一款电脑游戏中,你需要打败n只怪物(从1到n编号). 为了打败第i只怪物, ...

  9. BZOJ 3727 PA2014 Final Zadanie 树形DP

    题目大意:给定一棵树,令一个点到全部点的距离与点权的乘积之和为b[i].求每一个点的权值a[i] 首先假设给定a[i]我们能够非常轻松的求出b[i] 可是反过来怎么搞?高斯消元?30W? 考虑已知a[ ...

随机推荐

  1. k8s开发实践

    代码自动生成:https://blog.openshift.com/kubernetes-deep-dive-code-generation-customresources/ 自定义controlle ...

  2. 十六、USB驱动

    一.USB固件和USB传输方式 USB固件: USB固件一般不需要我们编写,在此不做程序分析. USB固件中包含USB设备的出厂信息,如厂商ID.产品ID.主版本号和次版本号等.这就是为什么当我们把U ...

  3. adb连接安卓设备的2种方式

    一.usb连接 安卓设备打开开发者模式,启用usb调试 CMD窗口输入adb devices,此时可以看到自己的设备 PS:无法看到自己设备时,查看手机USB调试是否打开:PC端是否安装手机驱动. 二 ...

  4. SQLSERVER 根据值查询表名

    CREATE PROCEDURE [dbo].[SP_FindValueInDB](@value VARCHAR(1024)) ASBEGIN-- SET NOCOUNT ON added to pr ...

  5. C++复制构造函数,类型转换构造函数,析构函数,引用,指针常量和常量指针

    复制构造函数形如className :: className(const &)   /   className :: className(const className &)后者能以常 ...

  6. rabbitmd

    一.前期准备   (1)条件:准备3台linux系统,确保能连到download.yunwei.edu   (2)编写yum源下载脚本: vim yum-repo.sh wget -O /etc/yu ...

  7. 文件锁 flock/fcntl

    多个进程同时操作一个文件 1. flock int flock(int fd, int operation); LOCK_SH 建立共享锁定.多个进程可同时对同一个文件作共享锁定(读锁定) LOCK_ ...

  8. MySQL binlog反解析

    反解析delete语句 背景:delete table忘了加条件导致整张表被删除 恢复方式:直接从binlog里反解析delete语句为insert进行恢复 导出删指定表的DELETE语句: # my ...

  9. 阿里云给自己实例扩容-扩展分区和文件系统_Linux系统盘

    阿里云买了台服务器ecs 磁盘容量40g 发现已经用了30g了  赶紧扩容 进入 e'cs实例 进入左边菜单 存储与快照 然后选择右边的扩容 然后支付 成功后 进入服务器 df -h 发现怎么还是没变 ...

  10. jenkins的理解及安装

    目录 一.理论概述 二.安装 一.理论概述 Jenkins的介绍 ​ Jenkins是一个基于MIT License协议的开源软件项目,是基于Java开发的一种持续集成(CI)工具,用于监控持续重复的 ...