4571: [Scoi2016]美味

Time Limit: 30 Sec Memory Limit: 256 MB

Submit: 275 Solved: 141

[Submit][Status][Discuss]

Description

一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n)。有 m 位顾客,第 i 位顾客的期

望值为 bi,而他的偏好值为 xi 。因此,第 i 位顾客认为第 j 道菜的美味度为 bi XOR (aj+xi),XOR 表示异或

运算。第 i 位顾客希望从这些菜中挑出他认为最美味的菜,即美味值最大的菜,但由于价格等因素,他只能从第

li 道到第 ri 道中选择。请你帮助他们找出最美味的菜。

Input

第1行,两个整数,n,m,表示菜品数和顾客数。

第2行,n个整数,a1,a2,...,an,表示每道菜的评价值。

第3至m+2行,每行4个整数,b,x,l,r,表示该位顾客的期望值,偏好值,和可以选择菜品区间。

1≤n≤2×105,0≤ai,bi,xi<105,1≤li≤ri≤n(1≤i≤m);1≤m≤10^5

Output

输出 m 行,每行 1 个整数,ymax ,表示该位顾客选择的最美味的菜的美味值。

Sample Input

4 4

1 2 3 4

1 4 1 4

2 3 2 3

3 2 3 3

4 1 2 4

Sample Output

9

7

6

7

题解

此题很明显可以用主席树。以权值为节点建树,然后每次二分判断每一位可否为1。

这道题有学长当时用区间建树过了,我硬是没想出来他怎么做的。

#include <cstdio>
#include <cstring> const int N = 2e5 + 5, M = N * 50;
int totNode, root[N], ls[M], rs[M], siz[M]; int ina; bool insign; char inc;
inline int geti() {
insign = 0; while ((inc = getchar()) < '0' || inc > '9') insign |= inc == '-'; ina = inc - '0';
while ((inc = getchar()) >= '0' && inc <= '9') ina = (ina << 3) + (ina << 1) + inc - '0';
return insign ? -ina : ina;
} void Update(int l, int r, int last, int &cur, int val) {
cur = ++totNode;
ls[cur] = ls[last]; rs[cur] = rs[last]; siz[cur] = siz[last] + 1;
if (l == r) return;
int mid = l + r >> 1;
if (val <= mid) Update(l, mid, ls[last], ls[cur], val);
else Update(mid + 1, r, rs[last], rs[cur], val);
} bool Query(int l, int r, int last, int cur, int x, int y) {
if (!(siz[cur] - siz[last])) return false;
if (x <= l && r <= y) return true;
int mid = l + r >> 1;
if (y <= mid) return Query(l, mid, ls[last], ls[cur], x, y);
else if (x > mid) return Query(mid + 1, r, rs[last], rs[cur], x, y);
else return Query(l, mid, ls[last], ls[cur], x, mid) || Query(mid + 1, r, rs[last], rs[cur], mid + 1, y);
} int main() {
int n, m, b, l, r, x, L, R, i, mid;
n = geti(), m = geti();
for (x = 1; x <= n; ++x)
Update(0, N, root[x - 1], root[x], geti());
while (m--) {
b = geti(), x = geti(), l = geti(), r = geti();
L = 0, R = (1 << 19) - 1;
for (i = 18; ~i; --i) {
mid = L + R >> 1;
if (b & (1 << i)) Query(0, N, root[l - 1], root[r], L - x, mid - x) ? (R = mid) : (L = mid + 1);
else Query(0, N, root[l - 1], root[r], mid - x + 1, R - x) ? (L = mid + 1) : (R = mid);
}
printf("%d\n", b ^ L);
}
return 0;
}

bzoj4571: [Scoi2016]美味的更多相关文章

  1. 【bzoj4571&&SCOI2016美味】

    4571: [Scoi2016]美味 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 656  Solved: 350[Submit][Status][ ...

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

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

  3. [BZOJ4571][SCOI2016]美味(贪心+主席树)

    经典问题,按位贪心,每次需要知道的是”在这一位之前的位都以确定的情况下,能否找到这一位是0/1的数”,这就是在询问[L,R]内某个值域区间是否有数,主席树即可. #include<cstdio& ...

  4. BZOJ4571: [Scoi2016]美味【主席树】【贪心】

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

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

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

  6. 2018.10.14 bzoj4571: [Scoi2016]美味(主席树)

    传送门 自认为是一道思想很妙的题. 直接分析问题. 如果没有xxx的干扰直接上可持久化01trie01trie01trie走人. 但现在有了xxx这个偏移量. 相当于把整个01trie01trie01 ...

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

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

  8. 【BZOJ4571】美味(主席树)

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

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

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

随机推荐

  1. Windows Phone App Studio发布重要更新-支持Windows 8.1 源代码生成

    自2013年8月Apps Team发布Windows Phone App Studio以来,由于其低入门门槛和较好的易用性,用户和项目数量增长迅速,从Windows Phone Developer B ...

  2. Sql--order by、desc降序、top

    ---------通过order by 语句进行排序: --1.降序order by 列名desc --2.升序order by 列名   或order by 列名asc --3.order by语句 ...

  3. Linux系统查看系统是32位还是64位方法总结

    这篇博客是总结.归纳查看Linux系统是32位还是64位的一些方法,很多内容来自网上网友的博客.本篇只是整理.梳理这方面的知识,方便自己忘记的时候随时查看. 方法1:getconf LONG_BIT ...

  4. DDD实施经验分享—价值导向、从上往下进行(圈内第一个吃螃蟹DDD实施方案)

    阅读目录: 1.背景 2.从业务开始 3.从战略到战术 4.借助外力推动研发(QA.领导.自动化测试) 5.领域模型与SAAS平台的内核(价值最大化) 6.最后 1.背景 DDD本身的技术就不介绍了, ...

  5. mysql内置函数大全

    mysql 字符串函数用法集合 ASCII(str)返回字符串str的最左面字符的ASCII代码值. mysql> select ascii('d'); +------------+ | asc ...

  6. js作用域问题

    <script type="text/javascript"> alert(i);//Uncaught ReferenceError: i is not defined ...

  7. android 生成验证码图片

    (转自:http://blog.csdn.net/onlyonecoder/article/details/8231373) package com.nobeg.util; import java.u ...

  8. shell中各种括号的作用()、(())、[]、[[]]、{}

    一.小括号,圆括号() 1.单小括号 ()    ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有 ...

  9. 理解 OpenStack 高可用(HA)(2):Neutron L3 Agent HA 之 虚拟路由冗余协议(VRRP)

    本系列会分析OpenStack 的高可用性(HA)概念和解决方案: (1)OpenStack 高可用方案概述 (2)Neutron L3 Agent HA - VRRP (虚拟路由冗余协议) (3)N ...

  10. 一个完整的TCP连接

    当我们向服务器发送HTTP请求,获取数据.修改信息时,都需要建立TCP连接,包括三次握手,四次分手. 什么是TCP连接? 为实现数据的可靠传输,TCP要在应用进程间建立传输连接.它是在两个传输用户之间 ...