【bzoj4571 scoi2016】美味
题目描述
一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1<=i<=n)。有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi 。因此,第 i 位顾客认为第 j 道菜的美味度为 bi XOR (aj+xi),XOR 表示异或运算。
第 i 位顾客希望从这些菜中挑出他认为最美味的菜,即美味值最大的菜,但由于价格等因素,他只能从第 li 道到第 ri 道中选择。请你帮助他们找出最美味的菜。
输入输出格式
输入格式:
第1行,两个整数,n,m,表示菜品数和顾客数。第2行,n个整数,a1,a2,...,an,表示每道菜的评价值。第3至m+2行,每行4个整数,b,x,l,r,表示该位顾客的期望值,偏好值,和可以选择菜品区间。1<=n<=2*10^5,0<=ai,bi,xi<10^5,1<=li<=ri<=n(1<=i<=m);1<=m<=10^5
输出格式:
输出 m 行,每行 1 个整数,ymax ,表示该位顾客选择的最美味的菜的美味值。
题意:
n个数,m个询问,每个询问要求输出l-r区间内(ai+x) xor b的最大值;
①一个数异或多个数异或最大值,还是可以考虑可持久化字典树;
②但是有偏好值,让可持久话字典树变成字典树套主席树,构造到第j位,已经确定好的j位以上的答案(ai+x)是ans,每次在ans^(~b&(1<<j)) 到 ans^(~b&(1<<j)) + (1<<j)-1区间里查询是否有值。
#include<cstdio>
#include<iostream>
using namespace std;
const int N = ,S = ,M = ;
int n,m,sz,a[N],rt[N],ls[N*S],rs[N*S],sum[N*S],bin[S];
char gc(){
static char *p1,*p2,s[];
if(p1==p2) p2=(p1=s)+fread(s,,,stdin);
return(p1==p2)?EOF:*p1++;
}
int rd(){
int x = ,f = ; char c = gc();
while(c<''||c>'') {if(c=='-') f = -; c = gc();}
while(c>=''&&c<='') x=x*+c-'',c = gc();
return x * f;
}
void ins(int &k,int last,int l,int r,int x){
k = ++sz;
sum[k] = sum[last] + ,ls[k] = ls[last],rs[k] = rs[last];
if(l==r) return ;
int mid = (l+r)>>;
if(x<=mid) ins(ls[k],ls[last],l,mid,x);
else ins(rs[k],rs[last],mid+,r,x);
}
bool query(int k1,int k2,int l,int r,int ql,int qr){
if(l==ql&&qr==r){
return bool(sum[k2]-sum[k1]);
}
else {
int mid = (l+r)>>;
if(qr<=mid) return query(ls[k1],ls[k2],l,mid,ql,qr);
else if(ql>mid) return query(rs[k1],rs[k2],mid+,r,ql,qr);
else return query(ls[k1],ls[k2],l,mid,ql,mid)|query(rs[k1],rs[k2],mid+,r,mid+,qr);
}
}
int main()
{ freopen("bzoj4571.in","r",stdin);
freopen("bzoj4571.out","w",stdout);
n = rd(); m = rd();
for(int i = ;i <= n;i++) ins(rt[i],rt[i-],,M,a[i] = rd());
for(int i = bin[] = ;i <= ;i++) bin[i] = bin[i-]<<;
for(int i = ,l,r,b,x;i <= m;i++){
b = rd(); x = rd(); l = rd(); r = rd();
int ans = ;
for(int k = ;k>=;k--){
if(!((b>>k)&)) ans |= bin[k];
int L = max(,ans - x),R = min((ans|(bin[k]-)) - x,M);
if(L > M || R < || !query(rt[r],rt[l-],,M,L,R)) ans ^= bin[k];
}
printf("%d\n",ans^b);
}
return ;
}//by tkys_Austin;
【bzoj4571 scoi2016】美味的更多相关文章
- 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]美味 【主席树】
题目 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为第 ...
- 2018.10.14 bzoj4571: [Scoi2016]美味(主席树)
传送门 自认为是一道思想很妙的题. 直接分析问题. 如果没有xxx的干扰直接上可持久化01trie01trie01trie走人. 但现在有了xxx这个偏移量. 相当于把整个01trie01trie01 ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- 【BZOJ4571】美味(主席树)
[BZOJ4571]美味(主席树) 题面 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
随机推荐
- equalsignorecase 和equals的区别
equals方法来自于Object类equalsIgnoreCase方法来自String类equals对象参数是Object 用于比较两个对象是否相等equals在Object类中方法默然比较对象内存 ...
- Django 基本设置
建立django目录,为了独立区分app和主站的关系,需要把app完全和主站分离 app/views.py from django.shortcuts import render from djang ...
- 根据HTML5的新方法 drag & drop 方法实现表格拖拽实例
上一次学习了html5的drag和drop方法,传送门 就自己写了个例子加深自己对drag和drop的理解.不过一开始不是很简单,遇到了不少问题.还好网络万能的,什么都能查到,总算完成了. 说明和详 ...
- $(function(){})和window.onload的区别
(1)$(function(){}):DOM节点创建 完成才执行 (2)window.onload:页面所有资源(JS/CSS)加载完成才执行
- 裸辞两个月,海投一个月,从Android转战Web前端的求职之路
前言 看到这个标题的童鞋,可能会产生两种想法: 想法一:这篇文章是标题党 想法二:Android开发越来越不景气了吗?前端越来越火了吗? 我一向不喜欢标题党,标题中的内容是我的亲身经历.我是2016年 ...
- PHP常见排序算法
$a = [1, 3, 5, 2, 4, 6, 12, 60, 45, 10, 32];$len = count($a);$num=0;/* * 冒泡排序 * 原理:不停的对相邻两个数进行比较,直到最 ...
- 作业三:模拟 mysql 进行增删改查
# !/usr/bin/env python3 # _*_coding:utf-8_*_ def help_sql(cmd): if cmd in func_dic.keys(): print('{} ...
- Netty事件监听和处理(上)
陪产假结束了,今天又开始正常上班了,正好赶上米粉节活动,又要忙上一阵了,米粉节活动时间为4.03 - 4.10,有不少优惠,感兴趣的可以关注mi.com或小米商城app. 今天给大家送了福利:小爱音箱 ...
- 新概念英语(1-7)Are you a teacher?
What is Robert's job? A:I am a new student. My name is Robert. B:Nice to meet you. My name's Sophie. ...
- 判断一个字符串是不是一个合法的IP地址
最近在笔试的时候遇到碰一道算法题, 要求判断一个字符串是不是合法的ip地址. 将我的思路发出来分享一下,不一定正确,也不一定是最优的方法.希望能分享一些交流 要求用java或者c来实现,我的java代 ...