原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4209

(虽然仅仅是看在名字的份上,我们还是得说这题是一道)

绝世好题!西瓜王!西瓜王!西瓜王![wàng]

说点正经的,一开始以为合成圣堂的时候必须相邻的,然后变成了区间内取k个数不能相邻的数的最大总价值,诶我的瓜妈妈呀,不会做啊……

看一下CA爷blog:贪心,然后替换……

诶,我看错题了?

最后就是主席树维护一下区间前k大的总价值,再查一下这最大的k个里面有多少个奇数多少偶数,如果奇数数量是奇数的话(好拗口)那就再查一下在前k大的数中最小的奇数和偶数,不在前k大中最大奇数和偶数,然后替换一下就吼了啊。。。

卡常卡不过啊T_T

#include<cstdio>
#include<algorithm>
#define MN 300001
#define ll long long
using namespace std; char ibuf[],*iptr=ibuf-,C;
inline int _(){
int x=,c=*++iptr;
while(c<)c=*++iptr;
while(c>)x=x*+c-,c=*++iptr;
return x;
}
char obuf[],*optr=obuf;
inline void _(ll x){
static int stk[],stp=;
if (x<) *(optr++)='-',x=-x;
if(!x)stk[stp++]=;
while(x)stk[stp++]=x%,x/=;
while(stp)*(optr++)=stk[--stp]+;
*(optr++)=;
}
struct tree{int l,r,s[],S;ll al;}t[MN*];
int n,m,a[MN],num=,l,r,k,s[],S[MN][],ro[MN],mi,ma;
ll mmh,c;
inline ll min(ll a,ll b){return a<b?a:b;}
inline ll max(ll a,ll b){return a>b?a:b;}
void in(int &P,int x,int v){
int l=mi,r=ma,mid,*p;p=&P;
for (;;){
*p=++num;t[*p]=t[x];t[*p].s[v&]++;t[*p].S++;t[*p].al+=v;
if (l==r) break;
int mid=l+r>>;
if (v<=mid) p=&t[*p].l,x=t[x].l,r=mid;else p=&t[*p].r,x=t[x].r,l=mid+;
}
}
void ask(int p,int x,int l,int r,int k){
while (l<r){
if (k>=t[t[p].r].S-t[t[x].r].S) s[]+=t[t[p].r].s[]-t[t[x].r].s[],s[]+=t[t[p].r].s[]-t[t[x].r].s[],
mmh+=t[t[p].r].al-t[t[x].r].al,k-=t[t[p].r].S-t[t[x].r].S,p=t[p].l,x=t[x].l,r=l+r>>;else p=t[p].r,x=t[x].r,l=(l+r>>)+;
if (k==) return;
}
if (k) mmh+=1LL*k*l,s[l&]+=k;
}
ll askmax(int p,int x,int k,bool bo){
if (t[p].s[bo]-t[x].s[bo]<=k) return -1e18;
int l=mi,r=ma;
while (l<r)
if (t[t[p].r].s[bo]-t[t[x].r].s[bo]>k) p=t[p].r,x=t[x].r,l=(l+r>>)+;else k-=t[t[p].r].s[bo]-t[t[x].r].s[bo],p=t[p].l,x=t[x].l,r=l+r>>;
return l;
}
ll askmin(int p,int x,int k,bool bo){
if (t[p].s[bo]-t[x].s[bo]<k) return 1e18;
int l=mi,r=ma;
while (l<r)
if (t[t[p].r].s[bo]-t[t[x].r].s[bo]>=k) p=t[p].r,x=t[x].r,l=(l+r>>)+;else k-=t[t[p].r].s[bo]-t[t[x].r].s[bo],p=t[p].l,x=t[x].l,r=l+r>>;
return l;
}
int main(){
ibuf[fread(ibuf,,,stdin)]=;
register int i;
n=_();t[].l=t[].r=t[].s[]=t[].s[]=t[].al=t[].S=;
for (i=;i<=n;i++) a[i]=_(),S[i][]=S[i-][],S[i][]=S[i-][],S[i][a[i]&]++,mi=min(mi,a[i]),ma=max(ma,a[i]);
for (i=;i<=n;i++) in(ro[i],ro[i-],a[i]);
m=_();
while (m--){
l=_();r=_();k=_();
if ((S[r][]-S[l-][]>>)+(S[r][]-S[l-][]>>)<(k>>)){_(-);continue;}
mmh=s[]=s[]=;ask(ro[r],ro[l-],mi,ma,k);
if (s[]&) mmh-=min(askmin(ro[r],ro[l-],s[],)-askmax(ro[r],ro[l-],s[],),askmin(ro[r],ro[l-],s[],)-askmax(ro[r],ro[l-],s[],));
_(mmh);
}
fwrite(obuf,,optr-obuf,stdout);
return ;
}

BZOJ:4209: 西瓜王的更多相关文章

  1. bzoj 4008 亚瑟王 - 动态规划 - 概率与期望

    Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...

  2. BZOJ 4008 亚瑟王

    Description 小K不慎被LL邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游 ...

  3. bzoj[HNOI2015]亚瑟王 - 递推与动规 - 概率与期望

    [bzoj4008][HNOI2015]亚瑟王 2015年4月22日3,2991 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之 ...

  4. BZOJ4209 : 西瓜王

    首先求出区间前$k$大数中奇数的个数和偶数的个数. 如果都是偶数,那么答案就是前$k$大数的和. 否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数. 主席树维护即可. 时间 ...

  5. bzoj 4008 亚瑟王 期望概率dp

    对于这种看起来就比较傻逼麻烦的题,最关键的就是想怎么巧妙的设置状态数组,使转移尽可能的简洁. 一开始我想的是f[i][j]表示到第j轮第i张牌还没有被选的概率,后来发现转移起来特别坑爹,还会有重的或漏 ...

  6. BZOJ [HNOI2015]亚瑟王 ——期望DP

    发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...

  7. BZOJ 4008 亚瑟王(概率DP 奥妙重重)

    题意 中文题面,就不解释了 分析 显然这道题直接求期望太麻烦,想想转化问题(这转化太神了). 定义f(i,j)f(i,j)f(i,j)表示第iii张卡总共被经过jjj次的概率,有转移方程式 f(i,j ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. BZOJ 4008 【HNOI2015】 亚瑟王

    题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我 ...

随机推荐

  1. CSS之clearfix清除浮动

    .clear { clear: both; height: 0; overflow: hidden; display: block; line-height: 0 }   .clearfix:afte ...

  2. Intellj Idea使用tomcat部署不成功,死活也找不到解决办法的看这里

    Intellij 周六晚上开发一个简单web项目的,使用tomcat打包部署,死活也没法部署成功,和这个问题怼了6个小时,也没搞清楚具体为什么不能访问页面,但是好在最后还是找了个方法把问题解决了.以下 ...

  3. 最全linux命令

    arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI ...

  4. golang 如何验证struct字段的数据格式

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/125 假设我们有如下结构体: type User struct ...

  5. CSS 水平居中/布局 垂直居中 (月经问题)

    水平居中 如果它是一个行内元素 对其父元素使用 text-align:center 即可实现. <p style = " text-align:center; width:300px; ...

  6. bat修改密码

    @echo off %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe&q ...

  7. 【quickhybrid】iOS端的项目实现

    前言 18年元旦三天内和朋友突击了下,勉强是将雏形做出来了,后续的API慢慢完善.(当然了,主力还是那个朋友,本人只是初涉iOS,勉强能看懂,修修改改而已) 大致内容如下: JSBridge核心交互部 ...

  8. Django学习日记07_Admin

    django.contrib django.contrib是django中附带的一个工具集,由很多的附加组件组成.这些附加组件包括管理工具(django.contrib.admin).用户鉴别系统(d ...

  9. hadoop集群篇--从0到1搭建hadoop集群

    一.前述 本来有套好好的集群,可是不知道为什么虚拟机镜像文件损坏,结果导致集群不能用.所以不得不重新搭套集群,借此机会顺便再重新搭套吧,顺便提醒一句大家,自己虚拟机的集群一定要及时做好快照,最好装完每 ...

  10. Ajax的请求方式几传参的区别

    Get,Post,Put,Delete请求(ajax)方式的不通. http://blog.jobbole.com/99854/