原题链接: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. 【bird-front】前端框架介绍

    bird前端项目,基于react.antd.antd-admin,封装常用数据组件,细粒度权限解决方案. bird-front是基于react的后台管理系统前端项目,框架构建部分严重借鉴于antd管理 ...

  2. 获取手机安装的所有包名adb shell pm list packages

    获取所有已安装包的包名:adb shell pm list packages 查找:adb shell pm list packages|findstr suning

  3. Oracle数据库(一)概述、基础与简单操作

    数据库: 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 数据库分类: 关系型数据库 非关系型数据库 数据库 类型 特性 优点 缺点 关系型数据库 SQLite.Oracle. ...

  4. iOS Xcode及模拟器SDK下载

    原文: Xcode及模拟器SDK下载 如果你嫌在 App Store 下载 Xcode 太慢,你也可以选择从网络上下载: Xcode下载(Beta版打的包是不能提交到App Store上的) 绝对官方 ...

  5. iOS tableViewCell 在自定义高度方法中遇到的问题,cell高度为0,cell显示不出来,cell直接显示第几个而不是...cell显示个数不对

    遇到以上问题可以看看你的cell高度中是否有,自定的高度,有了继续看,没有了继续百度... 在文字排版中,少不了自适应文字高度,行间距什么的:显然cell的高度时不固定的,如果复用自定义的cell的话 ...

  6. [array] leetcode - 42. Trapping Rain Water - Hard

    leetcode - 42. Trapping Rain Water - Hard descrition Given n non-negative integers representing an e ...

  7. Xamarin截取/删除emoji表情bug解决方案

    大家都知道,一个英文=1字节,一个汉字2字节,而一个emoji表情=4个字节,在有这三种混用的时候,比如app聊天界面,那么删除和截取便成了很头痛的事情. 问题描述 截取导致乱码,如下图: 解决方案 ...

  8. 关于MAX()函数的一点思考

    本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/103 考虑如下表和sql: CREATE TABLE `ikno ...

  9. Xamarin android如何反编译apk文件

    Xamarin android 如何反编译 apk文件 这里推荐一款XamarinAndroid开发的小游戏,撸棍英雄,游戏很简单,的确的是有点大.等一下我们来翻翻译这个Xamarin Android ...

  10. AntData.ORM框架 之 读写分离

    环境准备 准备2台机器配置好Master Slaver模式 我是用vmware 2台虚拟机配置的.有需要请联系. Master:192.168.11.130 Slaver:192.168.11.133 ...