bzoj 4571 [Scoi2016]美味——主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571
按位考虑,需要的就是一个区间;比如最高位就是(2^k -x)。
对于不是最高位的位置该怎么考虑?其实之前位置如果能或不能匹配上,也就相当于指定了之前的位上的是0还是1;把是1的位累计进一个变量里,加到区间的边界上就行了!
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=2e5+,M=1e5+,K=N*;
int n,m,mx,a[N],rt[N],tot,sm[K],ls[K],rs[K];
int ans,lj,lo,hi,bin[];
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
void build(int &cr,int pre,int l,int r,int v)
{
cr=++tot; ls[cr]=ls[pre]; rs[cr]=rs[pre];
sm[cr]=sm[pre]+;
if(l==r) return; int mid=l+r>>;
if(v<=mid) build(ls[cr],ls[pre],l,mid,v);
else build(rs[cr],rs[pre],mid+,r,v);
}
bool query(int cr,int pre,int l,int r,int L,int R)
{
if(l>=L&&r<=R) return sm[cr]-sm[pre];
int mid=l+r>>; bool fg=;
if(L<=mid) fg=query(ls[cr],ls[pre],l,mid,L,R);
if(!fg&&mid<R) fg=query(rs[cr],rs[pre],mid+,r,L,R);
return fg;
}
void init()
{
bin[]=;
for(int i=;i<=;i++) bin[i]=bin[i-]<<;
}
int main()
{
n=rdn(); m=rdn(); init();
for(int i=;i<=n;i++) a[i]=rdn(),mx=max(mx,a[i]);
for(int i=;i<=n;i++)
build(rt[i],rt[i-],,mx,a[i]);
for(int i=,b,x,l,r;i<=m;i++)
{
b=rdn(); x=rdn(); l=rdn(); r=rdn();
ans=; lj=;
for(int j=;j>=;j--)
{
if(b&bin[j]) {lo=lj; hi=lj+bin[j]-;}
else {lo=lj+bin[j]; hi=lj+bin[j+]-;}
hi-=x; lo-=x;
hi=min(hi,mx); lo=max(lo,); if(lo<=hi&&query(rt[r],rt[l-],,mx,lo,hi))
lj+=(b&bin[j]?:bin[j]),ans+=bin[j];
else lj+=(b&bin[j]?bin[j]:);
}
printf("%d\n",ans);
}
return ;
}
bzoj 4571 [Scoi2016]美味——主席树的更多相关文章
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
- BZOJ.4571.[SCOI2016]美味(主席树 贪心)
题目链接 要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反.带个减法Trie树好像很难做?反正我不会. 从最高位开始,如果这位b是0/1,判断是否存 ...
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- P3293 [SCOI2016]美味 主席树+按位贪心
给定长度为 \(n\) 序列 \(a[i]\) ,每次询问区间 \([l,r]\) ,并给定 \(b,x\) 中的一个数 \(p=a[i]\) ,使得最大化 \(b \bigoplus p^x\) 主 ...
- [SCOI2016]美味——主席树+按位贪心
原题戳这里 题解 让异或值最大显然要按位贪心,然后我们还发现加上一个\(x_i\)的效果就是所有\(a_i\)整体向右偏移了,我们对于\({a_i}\)开个主席树,支持查询一个区间中有多少个在\([L ...
- BZOJ4517[Scoi2016]美味——主席树
题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为 ...
- BZOJ4571:[SCOI2016]美味(主席树,贪心)
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi . 因此,第 ...
- bzoj 4571 美味 —— 主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 区间找异或值最大,还带加法,可以用主席树: 可以按位考虑,然后通过加上之前已经有的答案 ...
随机推荐
- C 标准库 - <stdarg.h>
C 标准库 - <stdarg.h> 简介 stdarg.h 头文件定义了一个变量类型 va_list 和三个宏,这三个宏可用于在参数个数未知(即参数个数可变)时获取函数中的参数. 可变参 ...
- centos7+ 安装Docker 17.03.2
cnetos7 安装 docker17.03.2 升级内核 http://m.blog.csdn.net/article/details?id=52047780 注意切换内核时查看 新内核位置 awk ...
- Python中的列表、元祖、字典
一.列表 一组有序项目的集合.可变的数据类型[可进行增删改查] 列表是以方括号"[]"包围的数据集合,不同成员以","分隔. 列表中能够包括不论什么数据类型,也 ...
- android客户端向服务器端验证登陆方法的实现2
一.在上一篇文章中,我只是提到了其中一种方法来实现登陆 大家可以参见: http://www.apkbus.com/android-45004-1-1.html android获取web服务 ...
- 【转载】Web Service和WCF的到底有什么区别
[1]Web Service:严格来说是行业标准,也就是Web Service 规范,也称作WS-*规范,既不是框架,也不是技术. 它有一套完成的规范体系标准,而且在持续不断的更新完善中. 它使用XM ...
- Thrift安装介绍
一.简介 1.语言库要求 因为thrift支持多语言.所以编译thrift源代码的过程中,会用到该语言的一些类库.如c++的boost.java的jdk等. 那么,在安装thrift过程中,须要对各种 ...
- AMD单双桥时序简叙
芯片组(双桥)时序 VBAT :RTC电路的供电3V(RTC电路有问题会导致没复位或不跑码等故障) RTCCLK :晶振起振给南桥提供32.768KHz频率(RTC电路有问题会导致没复位或不跑码等故障 ...
- sql quer
SELECT (SELECT COUNT (sysid) FROM FwInvConsumable WHERE parentref = g.sysid AND (ns.state = 'Invento ...
- Intel® RAID Software Users Guide
Intel® RAID Software Users Guide: Intel ® Embedded Server RAID Technology 2 Intel ® IT/IR RAID I ...
- xadmin入门使用
,官方文档:http://xadmin.readthedocs.io/en/docs-chinese/views_api.html 中文文档:https://www.kancloud.cn/net_y ...