BZOJ4209 : 西瓜王

首先求出区间前$k$大数中奇数的个数和偶数的个数。

如果都是偶数,那么答案就是前$k$大数的和。

否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数。

主席树维护即可。

时间复杂度$O((n+m)\log n)$。

#include<cstdio>
#include<algorithm>
using namespace std;
const int N=300010,M=6000000;
int n,m,i,x,y,k,a[N],b[N],tot,T[N],l[M],r[M],vc[M][2],c[2];long long v[M],sum,ans;
inline void read(int&a){char c;while(!(((c=getchar())>=‘0‘)&&(c<=‘9‘)));a=c-‘0‘;while(((c=getchar())>=‘0‘)&&(c<=‘9‘))(a*=10)+=c-‘0‘;}
inline int lower(int x){
  int l=1,r=n,mid,t;
  while(l<=r)if(b[mid=(l+r)>>1]<=x)l=(t=mid)+1;else r=mid-1;
  return t;
}
int ins(int x,int a,int b,int c,int d){
  int y=++tot;
  vc[y][0]=vc[x][0],vc[y][1]=vc[x][1];
  vc[y][d&1]++,v[y]=v[x]+d;
  if(a==b)return y;
  int mid=(a+b)>>1;
  if(c<=mid)l[y]=ins(l[x],a,mid,c,d),r[y]=r[x];else l[y]=l[x],r[y]=ins(r[x],mid+1,b,c,d);
  return y;
}
inline void ask(int x,int y,int k){
  int a=1,b=n,mid,t;
  c[0]=c[1]=sum=0;
  while(a<b){
    mid=(a+b)>>1,t=vc[r[x]][0]+vc[r[x]][1]-vc[r[y]][0]-vc[r[y]][1];
    if(k<=t)a=mid+1,x=r[x],y=r[y];
    else{
      k-=t;
      c[0]+=vc[r[x]][0]-vc[r[y]][0];
      c[1]+=vc[r[x]][1]-vc[r[y]][1];
      sum+=v[r[x]]-v[r[y]];
      b=mid,x=l[x],y=l[y];
    }
  }
  c[::b[a]&1]+=k,sum+=1LL*::b[a]*k;
}
inline int kth(int x,int y,int k,int p){
  int a=1,b=n,mid,t;
  while(a<b){
    mid=(a+b)>>1,t=vc[r[x]][p]-vc[r[y]][p];
    if(k<=t)a=mid+1,x=r[x],y=r[y];else k-=t,b=mid,x=l[x],y=l[y];
  }
  return ::b[a];
}
int main(){
  for(read(n),i=1;i<=n;i++)read(a[i]),b[i]=a[i];
  for(sort(b+1,b+n+1),i=1;i<=n;i++)T[i]=ins(T[i-1],1,n,lower(a[i]),a[i]);
  read(m);
  while(m--){
    read(x),read(y),read(k);
    if(k>y-x+1){puts("-1");continue;}
    ask(T[y],T[x-1],k);
    if(c[0]%2==0){printf("%lld\n",sum);continue;}
    for(ans=-1,i=0;i<2;i++)
      if(c[i]&&c[i^1]<vc[T[y]][i^1]-vc[T[x-1]][i^1])
        ans=max(ans,sum-kth(T[y],T[x-1],c[i],i)+kth(T[y],T[x-1],c[i^1]+1,i^1));
    printf("%lld\n",ans);
  }
  return 0;
}

  

时间: 2024-11-04 20:25:06

BZOJ4209 : 西瓜王的相关文章

bzoj:4209: 西瓜王

原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209 (虽然仅仅是看在名字的份上,我们还是得说这题是一道) 绝世好题!西瓜王!西瓜王!西瓜王![wàng] 说点正经的,一开始以为合成圣堂的时候必须相邻的,然后变成了区间内取k个数不能相邻的数的最大总价值,诶我的瓜妈妈呀,不会做啊-- 看一下CA爷blog:贪心,然后替换-- 诶,我看错题了? 最后就是主席树维护一下区间前k大的总价值,再查一下这最大的k个里面有多少个奇数多少偶数,如果奇

王小川清华大学毕业典礼演讲:我也有过学渣经历(和时间做朋友,要和华军、天空这些下载站做合作推广)

文讯网据新浪科技讯 7月4日上午消息,搜狗CEO王小川近日应邀在清华大学2016年毕业典礼上发表演讲,他在题为<和时间做朋友>的演讲中,讲诉了从清华毕业加入搜狐,并开始从无到有研发搜狗搜索的过程,希望通过创立搜狗的经历,向其学弟学妹讲诉从毕业到创业最大的感悟. 公开资料显示,王小川是清华大学1996级计算机系学生,并于2008年再度返校取得了清华大学经管学院EMBA学位. 王小川以自己为例作为开通,虽然大家都说他经历上很漂亮.但他说:“我也有不顺的时候,经历过很多的困难和挫折.先来说学渣的经历

NYIST 1006 偷西瓜

偷西瓜 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 对于农村的孩子来说最大的乐趣,莫过于和小伙伴们一块下地偷西瓜了,虽然孩子们条件不是很好,但是往往他们很聪明,他们总在计算着到达瓜田的距离,以及逃跑的路线,他们总是以最短的距离冲到瓜田里面,然后以最短的距离回到出发的地方,不过瓜田的大人们已经在他们来的路上等待他们.于是聪明的小伙伴们便不走过的路,即每条路只走一遍,如果小伙伴们回不到出发的地方,他们就说“eating”, 我们假设 有 n (n<=100)个 村庄

夏日里的狂欢-西瓜与代码齐飞

夏日带给我们的不止是炎热的天气,还有学习上的疲惫!为了活跃同学们的学习气氛,为了去除同学们的疲劳,更为了缓解这炎热的天气!成都传智播客java培训班7月5日基础班的同学们,在班主任王老师的带领下,举行了一个场休闲益智的班会活动! 满满的西瓜送清凉,衷心的关怀去疲劳! 王老师亲自操刀,为同学们切西瓜! 由于涉及同学们的吃相问题,在这里就略过了... 找座位记名字,看词比划猜! 活动一:首先学员自我介绍一下,例如,我是来自成都的某某某,或者我是喜欢吃西瓜的某某某!然后打乱座位,每人抽取一个号码,当念

西瓜书第一章--绪论

1.1引言 我印象最深的一句话就是:机器的分类能力比人强. 我们为什么要学习机器视觉?周志华教授开篇以西瓜的几个属性(比如色泽.根蒂.敲声)来判断一个西瓜是否是好瓜,这些都是靠人的经验完成的. 机器学习即是一门这样的学科,致力于研究通过计算机的手段,利用经验来改善系统自身性能.机器学习的主要研究内容:关于“学习算法”的学问.有了学习算法我们把经验数据传输给他,他就能产生出相对应的模型,在面对新的情况时,模型就会给我们提供一个相应的判断. 机器学习与数据挖掘的关系:很多人一开始被数据挖掘啊,大数据

[HNOI2015]亚瑟王

题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的. 作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值.但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验. 本题中我们将考虑游戏的一个简化版模型. 玩家有一套卡牌,共 n张.游戏时,玩家将

中央部门领导地址维权邮箱和记者手机号码大全2016(王焰)

今日说法信箱:[email protected] 焦点访谈信箱:[email protected] 社会记录信箱:[email protected] 信息发布:[email protected] [email protected] 国防部:[email protected] 监察部:[email protected] 城乡建设部:[email protected]或者[email protected] 国土资源部:[email protected] 参事室:[email protected] <

跟王老师学接口:(五)实例:对电子宠物系统进行重构

对电子宠物系统进行重构 主讲教师:王少华   QQ群号:483773664 一.重构需求 定义Eatable接口,在接口中定义eat()方法,表示吃饭功能 定义FlyingDiscCatchable接口,在接口中定义catchingFlyDisc()方法,表示接飞盘功能 定义Swimmable接口,在接口中定义swim()方法,表示游戏功能 定义抽象类Pet,包括宠物名称(name).健康值(health)和与主人亲密度(love)属性,并提供抽象方法print(),用来输出宠物信息 定义狗类(

王朝阳:关爱留守儿童是每一位企业家应有的责任

企业家不仅仅在过去,现在,或者是今后,都担任着重要的角色.他们不仅是拯救社会的重要力量,也是发展经济的中流砥柱. 近日,上海品送投资公司总裁王朝阳先生走近留守儿童,关心下一代成长,这不仅仅是企业家的责任,更是整个社会的责任,每一个社会成年人应有的责任和义务. 如何给留守儿童带去真正的关爱,让他们同时沐浴在祖国的蓝天白云之下,感受到来自社会大家庭的温暖.3月22日,记者从贵州黔醉酒业有限公司了解到,为了自觉承担起社会责任,关爱仁怀本地的留守儿童,下一步,他们将出资50万元,给当地的留守儿童带去实实