BZOJ:4209: 西瓜王
原题链接: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: 西瓜王的更多相关文章
- bzoj 4008 亚瑟王 - 动态规划 - 概率与期望
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
- BZOJ 4008 亚瑟王
Description 小K不慎被LL邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游 ...
- bzoj[HNOI2015]亚瑟王 - 递推与动规 - 概率与期望
[bzoj4008][HNOI2015]亚瑟王 2015年4月22日3,2991 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之 ...
- BZOJ4209 : 西瓜王
首先求出区间前$k$大数中奇数的个数和偶数的个数. 如果都是偶数,那么答案就是前$k$大数的和. 否则,要么去掉最小的偶数,加上最大的奇数,要么去掉最小的奇数,加上最大的偶数. 主席树维护即可. 时间 ...
- bzoj 4008 亚瑟王 期望概率dp
对于这种看起来就比较傻逼麻烦的题,最关键的就是想怎么巧妙的设置状态数组,使转移尽可能的简洁. 一开始我想的是f[i][j]表示到第j轮第i张牌还没有被选的概率,后来发现转移起来特别坑爹,还会有重的或漏 ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- BZOJ 4008 亚瑟王(概率DP 奥妙重重)
题意 中文题面,就不解释了 分析 显然这道题直接求期望太麻烦,想想转化问题(这转化太神了). 定义f(i,j)f(i,j)f(i,j)表示第iii张卡总共被经过jjj次的概率,有转移方程式 f(i,j ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 4008 【HNOI2015】 亚瑟王
题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我 ...
随机推荐
- IOS学习1——IOS应用程序的生命周期及基本架构
一.应用程序的状态和多任务 有时系统会从app一种状态切换另一种状态来响应系统发生的事件.例如,当用户按下home键.电话打入.或其他中断发生时,当前运行的应用程序会切换状态来响应.应用程序的状态有以 ...
- iOS 用户密码 数字字母特殊符号设置 判断
//直接调用这个方法就行 -(int)checkIsHaveNumAndLetter:(NSString*)password{ //数字条件 NSRegularExpression *tNumRegu ...
- 如何用VSCode愉快的写Python
在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器.由于本人用惯了宇宙第一IDE(Visual Studio),所以当Visual Studio C ...
- 三菱Q系列PLC的io分配
1.系统基本配置 2.存储卡配置 3.外部IO标号 4.主基板IO模块的IO号分配 5.扩展基板IO口标号 6.标准配置实例 7. 一.输入采样阶段 在输入采样阶段,可编程逻辑控制器以扫描方式依次地读 ...
- ArcGIS API for JavaScript 4.2学习笔记[7] 鹰眼(缩略图的实现及异步处理、Promise、回调函数、监听的笔记)
文前说明:关于style就是页面的css暂时不做评论,因为官方给的例子的样式实在太简单了,照抄阅读即可. 这篇文章有着大量AJS 4.x版本添加的内容,如监听watch.Promise对象.回调函数. ...
- Spring_Spring与IoC_Bean的装配
一.Bean的装配 bean的装配,即Bean对象的创建,容器根据代码要求来创建Bean对象后再传递给代码的过程,称为Bean的装配. 二.默认装配方式 代码通过getBean()方式从容 ...
- 用vue实现简单分页
在这个demo中,我用vue对一个json文件中的数据进行了简单的分页,没用用到交互,一下是我的实现过程. 基础逻辑 1.将json文件引入app.vue,并作为data返回 data(){ var ...
- python爬虫爬取人人车(二手车)、利用padas、matplotlib生成图表,将信息打成csv格式
该程序主要为了抓取人人车卖车信息,包括车系.车型号.购车日期.卖车价格.行驶路程.首付价格等等信息.话不多说直接代码. 入库之后将Mongodb里的信息导出成Excel语句 mongoexport - ...
- springBoot系列教程05:fastjson的集成、配置及使用
springBoot自带的json用着不太习惯,已习惯了fastJSON,下面介绍下fastjson的配置 1. pom引入 <dependency> <groupId>com ...
- javascript字符串与数组转换汇总
本文给大家分享的是Js中字符串转换成数组,数组转换成字符串的函数,十分的简单实用,有需要的小伙伴可以参考下. 数组转字符串 1.join()方法 ? 1 2 3 4 var s= ["a&q ...