BZOJ.4571.[SCOI2016]美味(主席树 贪心)
要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反。带个减法Trie树好像很难做?反正我不会。
从最高位开始,如果这位b是0/1,判断是否存在 \(sum+(1<<l)-x\leq a_j<sum+(1<<l+1)-x\) / \(sum-x\leq a_j<sum+(1<<l)-x\)。用主席树判断。
我还在想对于一个询问怎么一次算。。直接O(logn)枚举。
注意要从0开始!
//46136kb 13912ms
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
const int N=2e5+5,S=N*19,Max=1e5;
int n,m,root[N];
namespace T
{
int tot,son[S][2],sz[S];
void Insert(int x,int &y,int l,int r,int p)
{
sz[y=++tot]=sz[x]+1;
if(l<r){
int m=l+r>>1;
if(p<=m) son[y][1]=son[x][1], Insert(son[x][0],son[y][0],l,m,p);
else son[y][0]=son[x][0], Insert(son[x][1],son[y][1],m+1,r,p);
}
}
bool Exist(int x,int y,int l,int r,int L,int R)
{
if(L<=l && r<=R) return sz[y]-sz[x];
int m=l+r>>1;
if(L<=m)
if(m<R) return Exist(son[x][0],son[y][0],l,m,L,R)|Exist(son[x][1],son[y][1],m+1,r,L,R);
else return Exist(son[x][0],son[y][0],l,m,L,R);
return Exist(son[x][1],son[y][1],m+1,r,L,R);
}
bool Query(int r1,int r2,int l,int r)
{
l=std::max(0,l), r=std::min(r,Max);
return l>r?0:Exist(r1,r2,0,Max,l,r);
}
}
inline int read()
{
int now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
n=read(),m=read();
int b,x,l,r,sum;
for(int i=1; i<=n; ++i) T::Insert(root[i-1],root[i],0,Max,read());
while(m--)
{
b=read(),x=read(),l=read(),r=read();
sum=0;
for(int i=17,now; i>=0; --i)
{
now=sum+((1^((b>>i)&1))<<i);//感觉这部分很6啊。。
if(T::Query(root[l-1],root[r],now-x,now+(1<<i)-1-x)) sum=now;//可以补上这位使得答案最大
else sum+=((b>>i)&1)<<i;//不能的话说明这位只能同b一样,加上
}
printf("%d\n",sum^b);//直接记录和,最后^b即可。当然记答案也行。
}
return 0;
}
BZOJ.4571.[SCOI2016]美味(主席树 贪心)的更多相关文章
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
- bzoj 4571 [Scoi2016]美味——主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 按位考虑,需要的就是一个区间:比如最高位就是(2^k -x). 对于不是最高位的位置该 ...
- BZOJ4571:[SCOI2016]美味(主席树,贪心)
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi . 因此,第 ...
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- P3293 [SCOI2016]美味 主席树+按位贪心
给定长度为 \(n\) 序列 \(a[i]\) ,每次询问区间 \([l,r]\) ,并给定 \(b,x\) 中的一个数 \(p=a[i]\) ,使得最大化 \(b \bigoplus p^x\) 主 ...
- [SCOI2016]美味——主席树+按位贪心
原题戳这里 题解 让异或值最大显然要按位贪心,然后我们还发现加上一个\(x_i\)的效果就是所有\(a_i\)整体向右偏移了,我们对于\({a_i}\)开个主席树,支持查询一个区间中有多少个在\([L ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- BZOJ4517[Scoi2016]美味——主席树
题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为 ...
- bzoj4571/luogu3293 美味 (主席树+贪心)
首先想到建出可持久化trie树然后在上面贪心,但是它加了一个数所以不能这么做 但依然可以贪心,仿照上面那个的过程,如果设y是在第i位上^b是1的数(前面的位数已经贪好了),我只要在[l,r]范围内能有 ...
随机推荐
- SpringBoot入门Demo(Hello Word Boot)
Spring Boot 是由Pivotal团队提供的全新框架,其设计目的是用来简化新的Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. ...
- SQL语句(八)按条件查询
SELECT * FROM student SELECT sclass, snumb, sname FROM student --物理班有哪些同学 --年龄小于20岁的有哪些同学? --定价在30元以 ...
- NAT地址转换
2017年1月12日, 星期四 NAT地址转换 SNAT:源地址转换 DNAT:目标地址转换 null
- jq无缝滚动效果插件(之前的那个升级改造加强版)
scroll滚动插件 支持上下左右,淡入淡出,滚动时间设置,动画时间设置,鼠标经过是否停止设置 默认配置参数可修改 $(".content").easysroll({ //默认配置 ...
- JD m站自我解析理解
第一步:从首页着手 文档部分:应用的是H5默认文档开头 即:<!DOCUMENT html> head部分:放了一些相关的JS,title描述,然后就是meta表述了.比较有参考的如下 & ...
- Caffe 碎碎念
Window Data Layer window data layer 的数据是存在硬盘上的图片, 需要在一个txt里指定用于训练或测试的图片以及bounding box, bounding box ...
- Nuts & Bolts Problem
Given a set of n nuts of different sizes and n bolts of different sizes. There is a one-one mapping ...
- Linux网络状态工具ss命令使用详解【转】
ss命令用于显示socket状态. 他可以显示PACKET sockets, TCP sockets, UDP sockets, DCCP sockets, RAW sockets, Unix dom ...
- 乐视max2 在开发中无法打印某些logcat 解决方案
乐视屏蔽了打印log.d等类型logcat.解决方案:拨号键盘 *#*#76937#*#* 出现页面后选最下面那个选项就有了.
- mybatis,genarate自动生成代码
---恢复内容开始--- generatorConfig.xml配置文件: <?xml version="1.0" encoding="UTF-8"?&g ...