【bzoj4571】美味
Solution
emmm持续智力康复。。
虽然说因为统计的是加上\(x\)的跟\(b\)异或的最大值所以可持久化trie用不了了
但是按位贪心的思想还是非常ok的
然后又因为权值范围比较小,那就权值线段树然后可持久化一下,对于一个查询\(b\),我们从高位到低位枚举每一位,对于当前枚举到的第\(j\)位,先确定一个范围,这个范围内的任意一个数\(i\)加上\(x\)后都满足\(i\)^\(b\)的结果的第\(j\)位为1,然后我们在这个范围内的主席树上查一下有没有在这个区间内的数,有的话就说明这位可以满足异或后为\(1\),搞到答案里面去,否则就不能为\(1\),不管,然后接着枚举下一位,总的复杂度\(O(nlog^2n)\)
(其实就是。。把按位贪心的过程从trie上面搬到了主席树上。。)
代码大概长这个样子
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=2*(1e5)+10,SEG=N*20,MX=N,TOP=20;
int a[N];
int n,m,mx,L,R;
namespace Seg{/*{{{*/
int ch[SEG][2],sum[SEG],rt[N];
int n,tot;
void init(int _n){n=_n; tot=0;}
int newnode(int pre){
ch[++tot][0]=ch[pre][0]; ch[tot][1]=ch[pre][1]; sum[tot]=sum[pre];
return tot;
}
void _insert(int pre,int &x,int d,int lx,int rx){
x=newnode(pre);
++sum[x];
if (lx==rx) return;
int mid=lx+rx>>1;
if (d<=mid) _insert(ch[pre][0],ch[x][0],d,lx,mid);
else _insert(ch[pre][1],ch[x][1],d,mid+1,rx);
}
void insert(int pre,int x,int d){_insert(rt[pre],rt[x],d,1,n);}
bool _query(int L,int R,int l,int r,int lx,int rx){
if (!R) return 0;
if (l<=lx&&rx<=r) return (sum[R]-sum[L])>0;
int mid=lx+rx>>1,ret=0;
if (l<=mid) ret|=_query(ch[L][0],ch[R][0],l,r,lx,mid);
if (r>mid) ret|=_query(ch[L][1],ch[R][1],l,r,mid+1,rx);
return ret;
}
bool query(int tL,int tR,int l,int r){return _query(rt[tL-1],rt[tR],l,r,1,n);}
}/*}}}*/
int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int b,x,l,r,tmp;
scanf("%d%d",&n,&m);
Seg::init(MX);
for (int i=1;i<=n;++i){
scanf("%d",a+i);
Seg::insert(i-1,i,a[i]);
}
for (int i=1;i<=m;++i){
scanf("%d%d%d%d",&b,&x,&l,&r);
tmp=0;
for (int j=TOP;j>=0;--j){
if (b>>j&1){
L=max(0,tmp-x); R=(tmp|((1<<j)-1))-x;
if (R<0||!Seg::query(l,r,L,R)) tmp^=(1<<j);
}
else{
L=max(0,(tmp^(1<<j))-x); R=((tmp^(1<<j))|((1<<j)-1))-x;
if (R<0||!Seg::query(l,r,L,R)) continue;
else tmp^=(1<<j);
}
}
printf("%d\n",tmp^b);
}
}
【bzoj4571】美味的更多相关文章
- 【BZOJ4571】美味(主席树)
[BZOJ4571]美味(主席树) 题面 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 ...
- 【bzoj4571 scoi2016】美味
题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1<=i<=n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi .因此,第 ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- bzoj4571: [Scoi2016]美味
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MB Submit: 275 Solved: 141 [Submit][Status][ ...
- 【bzoj4571&&SCOI2016美味】
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 656 Solved: 350[Submit][Status][ ...
- BZOJ4571:[SCOI2016]美味(主席树,贪心)
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi . 因此,第 ...
- [BZOJ4571][SCOI2016]美味(贪心+主席树)
经典问题,按位贪心,每次需要知道的是”在这一位之前的位都以确定的情况下,能否找到这一位是0/1的数”,这就是在询问[L,R]内某个值域区间是否有数,主席树即可. #include<cstdio& ...
- BZOJ4571: [Scoi2016]美味【主席树】【贪心】
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 ...
- BZOJ4571:[SCOI2016]美味——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=4571 https://www.luogu.org/problemnew/show/P3293 一家 ...
随机推荐
- 【UGUI】 (二)--------- 小地图
在绝大多数游戏中,小地图都是极为常见的一个模块而且十分重要.在Unity里面如何制作一个地图其实也是比较简单的 一. 创建玩家与敌人 创建一个Capsule,命名为Player,代表我们的游戏玩家,创 ...
- Spark配置参数的三种方式
1.Spark 属性Spark应用程序的运行是通过外部参数来控制的,参数的设置正确与否,好与坏会直接影响应用程序的性能,也就影响我们整个集群的性能.参数控制有以下方式:(1)直接设置在SparkCon ...
- openstack系列文章(三)
学习openstack的系列文章-glance glance 基本概念 glance 架构 openstack CLI Troubleshooting 1. glance 基本概念 在 opensta ...
- 从零开始的Python学习Episode 11——装饰器
装饰器 装饰器是用来处理其他函数的函数,主要作用是在不修改原有函数的情况下添加新的功能,装饰器的返回值也是一个函数对象. 简单的装饰器 import time def show_time(f): de ...
- 特征点检测--基于CNN:TILDE: A Temporally Invariant Learned DEtector
TILDE: A Temporally Invariant Learned DEtector Yannick Verdie1,∗ Kwang Moo Yi1,∗ Pascal Fua1 Vincent ...
- Python学习之web框架 Flask
一.通过PIP 安装Flask 1.1 Windows环境安装pip A.首先PIP进入官网(https://pypi.python.org/pypi/pip)下载gz包 B.对gz压缩包进行解压,解 ...
- eos TODO EOS区块链上EOSJS和scatter开发dApp
由于我一直在深入研究EOS dApp的开发,我看了不少好文章.在这里,我汇总了下做一些研究后得到的所有知识.在本文中,我将解释如何使用EOSJS和scatter.我假设你对智能合约以及如何在EOS区块 ...
- BVT、EVT、DVT、PVT产品开发几个阶段
EVT EVT(Engineering Verification Test) 工程验证 产品开发初期的设计验证.设计者实现样品时做初期的测试验证,包括 功能和安规测试,一般由 RD(Researc ...
- Scrum立会报告+燃尽图(十月十二日总第三次):视频相关工作
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2190 Scrum立会master:孙赛佳 一.小组介绍 组长:付佳 组员 ...
- 冲刺阶段站立会议每日任务i4
昨天对小组成员的任务进行了进一步细化分配,今天了解了安卓开发环境的相关知识. 遇到的问题: 没有遇到问题.