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\). 我 ...
随机推荐
- linux使用freetds 连接连远程服务器sqlservser2012
1.下载:freetds-patched.tar.gz http://www.freetds.org/software.html http://www.freetds.org/userguide/c ...
- iOS 让图片变模糊
#import <Accelerate/Accelerate.h> 1.初始化图片 UIImageView *iv = [[UIImageView alloc]initWithFrame: ...
- 【NOIP模拟】cut
Description F大爷热爱切树.今天他找到一棵黑白树,不到两秒钟,F大爷就把这棵树切掉了.已知原先树上共n个点,每个点都是黑点或者白点,F大爷切去若干条边后,分成的若干个连通子树中每块恰有一个 ...
- 538. Convert BST to Greater Tree
Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original B ...
- bzoj 3331: [BeiJing2013]压力
Description 如今,路由器和交换机构建起了互联网的骨架.处在互联网的骨干位置的 核心路由器典型的要处理100Gbit/s的网络流量.他们每天都生活在巨大的压力 之下. 小强建立了一个模型.这 ...
- KD树
k-d树 在计算机科学里,k-d树( k-维树的缩写)是在k维欧几里德空间组织点的数据结构.k-d树可以使用在多种应用场合,如多维键值搜索(例:范围搜寻及最邻近搜索).k-d树是空间二分树(Binar ...
- PHP重要知识点
1 获取文件名或目录路径 getcwd() :显示是 在哪个文件里调用此文件 的目录 __DIR__ :当前内容写在哪个文件就显示这个文件目录 __FILE__ : 当前内容写在哪个文件就显示这个文件 ...
- zookeeper部署到linux操作步骤
安装zookeeper1. 上传上传zookeeper,在\01课前资料\02技术资料2. 移动[root@itcast-01 ~]# mv zookeeper-3.4.6.tar.gz /usr/l ...
- android inline hook
最近终于沉下心来对着书把hook跟注入方面的代码敲了一遍,打算写几个博客把它们记录下来. 第一次介绍一下我感觉难度最大的inline hook,实现代码参考了腾讯GAD的游戏安全入门. inline ...
- 自己做一台3D打印机到底有多难?(附教程)
• 微博: 小样儿老师2015 初识 3D打印技术,即快速成形技术,它是一种以数字模型文件为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来构造物体的技术,3D打印机则出现在上世纪9 ...