传送门

自认为是一道思想很妙的题。


直接分析问题。

如果没有xxx的干扰直接上可持久化01trie01trie01trie走人。

但现在有了xxx这个偏移量。

相当于把整个01trie01trie01trie向左平移了xxx。

这个感觉01trie01trie01trie维护不是很可做。

于是我们把可持久化01trie01trie01trie转成主席树。

发现只是把选择左/右子树变成了选择左/右半区间。

然后照样贪心查询就行了。

代码:

#include<bits/stdc++.h>
#define N 200005
#define M 100005
#define P 17
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int rt[N],son[N*30][2],siz[N*30],n,m,a[N],tot=0;
inline void update(int&p,int las,int l,int r,int k){
	p=++tot,son[p][0]=son[las][0],son[p][1]=son[las][1],siz[p]=siz[las]+1;
	if(l==r)return;
	int mid=l+r>>1;
	if(k<=mid)update(son[p][0],son[las][0],l,mid,k);
	else update(son[p][1],son[las][1],mid+1,r,k);
}
inline int query(int pl,int pr,int l,int r,int ql,int qr){
	if(ql>r||qr<l)return 0;
	if(ql<=l&&r<=qr)return siz[pr]-siz[pl];
	int mid=l+r>>1;
	if(qr<=mid)return query(son[pl][0],son[pr][0],l,mid,ql,qr);
	if(ql>mid)return query(son[pl][1],son[pr][1],mid+1,r,ql,qr);
	return query(son[pl][0],son[pr][0],l,mid,ql,mid)+query(son[pl][1],son[pr][1],mid+1,r,mid+1,qr);
}
inline int query(int l,int r,int val,int dta){
	int ret=0,xortmp=0;
	for(int i=P;~i;--i){
		int tmp=1<<i;
		if(val&tmp)if(query(rt[l-1],rt[r],1,200000,xortmp-dta,xortmp+tmp-dta-1))ret|=tmp;else xortmp|=tmp;
		else if(query(rt[l-1],rt[r],1,200000,xortmp+tmp-dta,xortmp+tmp*2-dta-1))ret|=tmp,xortmp|=tmp;
	}
	return ret;
}
int main(){
	n=read(),m=read();
	for(int i=1;i<=n;++i)update(rt[i],rt[i-1],1,200000,(a[i]=read()));
	for(int i=1,b,x,l,r;i<=m;++i)b=read(),x=read(),l=read(),r=read(),printf("%d\n",query(l,r,b,x));
	return 0;
}

2018.10.14 bzoj4571: [Scoi2016]美味(主席树)的更多相关文章

  1. BZOJ4571:[SCOI2016]美味(主席树,贪心)

    Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi . 因此,第 ...

  2. 【BZOJ4571】[Scoi2016]美味 主席树

    [BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...

  3. bzoj 4571: [Scoi2016]美味 (主席树)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec   ...

  4. BZOJ.4571.[SCOI2016]美味(主席树 贪心)

    题目链接 要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反.带个减法Trie树好像很难做?反正我不会. 从最高位开始,如果这位b是0/1,判断是否存 ...

  5. P3293 [SCOI2016]美味 主席树+按位贪心

    给定长度为 \(n\) 序列 \(a[i]\) ,每次询问区间 \([l,r]\) ,并给定 \(b,x\) 中的一个数 \(p=a[i]\) ,使得最大化 \(b \bigoplus p^x\) 主 ...

  6. 2018.10.31 bzoj3339&&3585mex(主席树)

    传送门 双倍经验 直接上主席树,每个叶节点维护这个值出现的最右区间,非叶子节点维护当前值域内所有最右区间的最小值. 查询的时候只用在以root[qr]root[qr]root[qr]为根的树上面二分. ...

  7. [SCOI2016]美味——主席树+按位贪心

    原题戳这里 题解 让异或值最大显然要按位贪心,然后我们还发现加上一个\(x_i\)的效果就是所有\(a_i\)整体向右偏移了,我们对于\({a_i}\)开个主席树,支持查询一个区间中有多少个在\([L ...

  8. BZOJ4517[Scoi2016]美味——主席树

    题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为 ...

  9. bzoj4571/luogu3293 美味 (主席树+贪心)

    首先想到建出可持久化trie树然后在上面贪心,但是它加了一个数所以不能这么做 但依然可以贪心,仿照上面那个的过程,如果设y是在第i位上^b是1的数(前面的位数已经贪好了),我只要在[l,r]范围内能有 ...

随机推荐

  1. spring集成多个rabbitMQ

    转自:https://blog.csdn.net/zz775854904/article/details/81092892 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用 ...

  2. js实现点击按钮弹出上传文件的窗口

    转自:https://www.jb51.net/article/100916.htm 1.详细描述 在页面上设置一个“选择文件”按钮,点击该按钮,会弹出本地磁盘信息用于选择文件. 2.代码 ? 1 2 ...

  3. 进程和创建线程的两种方法(threading.Thread)

    进程 如QQ 要以一个整体的形式暴露给操作系统管理,里面包含对各种资源的调用,内存的管理, 网络接口的调用等,进程就是各种资源管理的集合 线程:是操作系统最小的调度单位,是一串指令的结合 进程 要操作 ...

  4. Cookie的过期时间设置

    https://pan.baidu.com/s/1ibUQhLt6ZgVyhVM6mnrtHg 密码:9psc

  5. ubuntu安装openssh-server 报依赖错误的解决过程

    ubuntu自带的有openssh-client,所以可以通过 ? 1 ssh username@host 来远程连接linux 可是要想通过ssh被连接,ubuntu系统需要有openssh-ser ...

  6. 前端基础之Bootstrap

    1. 页面加载完之后才执行的JS代码        1. DOM方式            window.onload = function(){}        2. jQuery方式       ...

  7. 对象池 object pool

    对象池适用于: 对象的创建很耗时 对象频繁地释放再创建 对象池的实现:将释放的对象放进对象池中,在新建对象时,从对象池取对象 public class ObjectPool<T> wher ...

  8. python之socket运用之执行命令

    服务端的代码 import socket import subprocess HOST = "127.0.0.1" PORT = 5001 ip_bind = (HOST,PORT ...

  9. 利用Google Chrome开发插件,在网页中植入js代码

    Google Chrome是一个很强大的浏览器,提供了各种各样的插件,大大提升了使用了的效率,比如vimium.honx等. Google在提供这些插件的同时还允许用户开发自己的插件. 最近在写js的 ...

  10. 两数之和-数据结构设计 · Two Sum - Data structure design

    [抄题]: 设计b并实现一个 TwoSum 类.他需要支持以下操作:add 和 find.add -把这个数添加到内部的数据结构.find -是否存在任意一对数字之和等于这个值 [思维问题]: 不知道 ...