BZOJ4571:[SCOI2016]美味(主席树,贪心)
Description
Input
Output
输出 m 行,每行 1 个整数,ymax ,表示该位顾客选择的最美味的菜的美味值。
Sample Input
1 2 3 4
1 4 1 4
2 3 2 3
3 2 3 3
4 1 2 4
Sample Output
7
6
7
Solution
感觉自己有点傻……
考虑按位贪心。
首先要明确一个东西,我们最终要输出的是$ans~xor~b$,所以贪$ans$的时候要注意一下。
若$b$的第$i$位为$1$,那么如果在区间$[ans-x,(ans|((1<<i)-1))-x]$如果没有数的话,$ans$的第$i$位就置为$1$,也就是对应着答案这里这一位选不上,成$0$了。
若$b$的第$i$位为$0$的情况同理……我也说不太清楚……看看代码感性理解一下吧……QAQ
Code
#include<iostream>
#include<cstdio>
#define N (200009)
using namespace std; struct Sgt{int ls,rs,val;}Segt[N<<];
int n,m,b,x,l,r,L,R,ans,sgt_num,a[N],Root[N]; int Update(int pre,int l,int r,int x)
{
int now=++sgt_num;
Segt[now]=Segt[pre]; Segt[now].val++;
if (l==r) return now;
int mid=(l+r)>>;
if (x<=mid) Segt[now].ls=Update(Segt[now].ls,l,mid,x);
else Segt[now].rs=Update(Segt[now].rs,mid+,r,x);
return now;
} int Query(int u,int v,int l,int r,int l1,int r1)
{
if (l>r1 || r<l1) return ;
if (l1<=l && r<=r1) return Segt[v].val-Segt[u].val;
int mid=(l+r)>>;
return Query(Segt[u].ls,Segt[v].ls,l,mid,l1,r1)+Query(Segt[u].rs,Segt[v].rs,mid+,r,l1,r1);
} int main()
{
scanf("%d%d",&n,&m);
for (int i=; i<=n; ++i)
scanf("%d",&a[i]), Root[i]=Update(Root[i-],,1e5,a[i]);
while (m--)
{
ans=;
scanf("%d%d%d%d",&b,&x,&l,&r);
for (int i=; i>=; --i)
if (b&(<<i))
{
L=max(,ans-x); R=(ans|((<<i)-))-x;
if (!Query(Root[l-],Root[r],,1e5,L,R)) ans|=(<<i);
}
else
{
ans|=(<<i);
L=max(,ans-x); R=(ans|((<<i)-))-x;
if (!Query(Root[l-],Root[r],,1e5,L,R)) ans^=(<<i);
}
printf("%d\n",ans^b);
}
}
BZOJ4571:[SCOI2016]美味(主席树,贪心)的更多相关文章
- BZOJ.4571.[SCOI2016]美味(主席树 贪心)
题目链接 要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反.带个减法Trie树好像很难做?反正我不会. 从最高位开始,如果这位b是0/1,判断是否存 ...
- bzoj4571/luogu3293 美味 (主席树+贪心)
首先想到建出可持久化trie树然后在上面贪心,但是它加了一个数所以不能这么做 但依然可以贪心,仿照上面那个的过程,如果设y是在第i位上^b是1的数(前面的位数已经贪好了),我只要在[l,r]范围内能有 ...
- 【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 ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
- BZOJ4517[Scoi2016]美味——主席树
题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为 ...
- bzoj 4571 [Scoi2016]美味——主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 按位考虑,需要的就是一个区间:比如最高位就是(2^k -x). 对于不是最高位的位置该 ...
- [BZOJ4571][SCOI2016]美味(贪心+主席树)
经典问题,按位贪心,每次需要知道的是”在这一位之前的位都以确定的情况下,能否找到这一位是0/1的数”,这就是在询问[L,R]内某个值域区间是否有数,主席树即可. #include<cstdio& ...
随机推荐
- saas模式
SaaS是Software-as-a-service(软件即服务).SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件.硬件运作平台,并负责所有前期的实施.后期的维护等一系列服务,企业无需购 ...
- Dubbo下载-从missing artifactId说起
项目pom文件引入dubbo 报 missing artifactId https://github.com/dangdangdotcom/dubbox 从GitHub上直接下载解压包, 最好下载分支 ...
- java自学-基本数据类型
java中也有对数据的运算处理,java中数据分为常量和变量,常量就是直接固定不变的数据,变量是数据可能发生改变的数据,如下: int a=0; a=1+1; 上边代码,a就是变量,初始为0,接下来 ...
- IDEA 的 properties 文件的属性字段如何链接到调用的文件
想要达到的效果: ctrl + 鼠标点击:弹出如下所有使用的文件 问题: 有些 IDEA 使用 ctrl + 鼠标点击不能看到使用的文件. 解决办法: ctrl + 鼠标点击,然后选择设置按钮 然后 ...
- 【java基础】从反射开始(Reflection)
Java学习笔记 https://github.com/SnailDev/java-learning 和我一起启程... 反射(Reflection) 定义 在运行状态中, 对于任意的一个类,都能够知 ...
- Spring 中面向AOP之一系列做法
Spring的AOP实现是通过集成AspectJ框架实现的. 想必这句话大家都知道了吧,不知道也没关系,最起码你现在知道了. 四种实现方案,接下来我们一一去揭开它的神秘的面纱....... 第一种(伪 ...
- java:Filter、Listener 自定义拦截器和过滤器应用
一,Filter FilterEncoding 过滤器,统一设置servlet的编码格式. package com.dkt.filter; import java.io.IOException; im ...
- 【朴灵评注】JavaScript 运行机制详解:再谈Event Loop
PS: 我先旁观下大师们的讨论,得多看书了~ 别人说的:“看了一下不觉得评注对到哪里去,只有吹毛求疵之感. 比如同步异步介绍,本来就无大错:比如node图里面的OS operation,推敲一下就 ...
- 132.1.001 Union-Find | 并查集
@(132 - ACM | 算法) Algorithm | Coursera - by Robert Sedgewick > Tip: Focus on WHAT is really impor ...
- [翻译] SAMCoreImageView
SAMCoreImageView https://github.com/soffes/SAMCoreImageView Render a CIImage in an OpenGL thingy so ...