这道题想了好几天了。。。可持久化trie完全做不动

然后不知道谁给了个路牌,今天突然会了

拿个主席树来,维护一下权值线段树,一开始我们想让最高位为1,那么就看看对于b取0还是1,假如没有加的操作,区间就是0~2^j-1上的数该位是0,2^j~2^(j+1)-1是1,加上的数就相当于这些区间都减掉这个数,据此用类似可持久化trie的思想,在左右区间找并不断更新区间lr即可

#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
using namespace std;struct chairman
{int lc,rc,c;
}tr[6100000];int trlen,rt[210000];
int maketree(int x,int l,int r,int p)
{if(x==0){x=++trlen;tr[x].lc=tr[x].rc=0;}tr[x].c++;if(l<r){int mid=(l+r)/2;if(p<=mid)tr[x].lc=maketree(tr[x].lc,l,mid,p);else       tr[x].rc=maketree(tr[x].rc,mid+1,r,p);}return x;
}
int merge(int x,int y)
{if(x==0||y==0)return x+y;tr[x].c+=tr[y].c;tr[x].lc=merge(tr[x].lc,tr[y].lc);tr[x].rc=merge(tr[x].rc,tr[y].rc);return x;
}
bool check(int x,int y,int ml,int mr,int l,int r)
{if(l<0)l=0;if(x==0&&y==0)return false;if(ml==l&&mr==r)return (tr[y].c-tr[x].c)>0;int mid=(ml+mr)/2;if(r<=mid)  return check(tr[x].lc,tr[y].lc,ml,mid,l,r);else if(mid+1<=l)return check(tr[x].rc,tr[y].rc,mid+1,mr,l,r);else return check(tr[x].lc,tr[y].lc,ml,mid,l,mid)|check(tr[x].rc,tr[y].rc,mid+1,mr,mid+1,r);
}int main()
{freopen("a.in","r",stdin);freopen("a.out","w",stdout);int n,Q,x;scanf("%d%d",&n,&Q);trlen=0;memset(rt,0,sizeof(rt));for(int i=1;i<=n;i++){scanf("%d",&x);rt[i]=maketree(rt[i],0,(1<<23)-1,x);rt[i]=merge(rt[i],rt[i-1]);}while(Q--){int g,d,st,ed;scanf("%d%d%d%d",&g,&d,&st,&ed);int L=-d,R=(1<<23)-1-d,ans=0;for(int i=22;i>=0;i--){int mid=(L+R)>>1;int x=(g&(1<<i));if(x==0){if(check(rt[st-1],rt[ed],0,(1<<23)-1,mid+1,R))ans+=(1<<i), L=mid+1;elseR=mid;}else{if(check(rt[st-1],rt[ed],0,(1<<23)-1,L,mid))ans+=(1<<i), R=mid;elseL=mid+1;}}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/AKCqhzdy/p/9650086.html

bzoj4571: [Scoi2016]美味相关推荐

  1. bzoj [Scoi2016]美味

    [Scoi2016]美味 Time Limit: 30 Sec  Memory Limit: 256 MB Submit: 721  Solved: 391 [Submit][Status][Disc ...

  2. P3293 [SCOI2016]美味

    P3293 [SCOI2016]美味 题意: 有n个数组a,现在有m个询问,每次给出一个b和x,问b xor (a[i] + x)的最大值是多少? 题解: 不难看出01Trie的题目 我们设ans=a ...

  3. 洛谷·[SCOI2016]美味

    初见安~这里是传送门:洛谷P3293 [SCOI2016]美味 题解 首先看到有两层限制:区间[l, r]以及要异或值最大.很显然把区间限制转化到时间限制,建可持久化数据结构. 每道菜对不同的人有不同 ...

  4. BZOJ4571:[SCOI2016]美味——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4571 https://www.luogu.org/problemnew/show/P3293 一家 ...

  5. [BZOJ 4571][Scoi2016]美味(主席树)

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

  6. trie树上值域化建主席树 查询异或平移最小值 ---- P3293 [SCOI2016]美味

    题目大意: 解题思路: 首先我们知道区间查询异或最小值肯定是在trie是匹配 而且如果没有(aj+xi)(aj+xi)(aj+xi)就是一个可持久化Trie树上面的裸题了 但是很不幸有 怎么办呢? 首 ...

  7. luogu P3293 [SCOI2016]美味

    传送门 异或最大值应该是要用\(trie\)树,从高位往低位贪心,虽然这里询问区间的数都要加上\(x\),但是仍然可以利用这个思想 从高往低位考虑,我们要找一个加上\(x\)后当前二进制位\(j\)不 ...

  8. P3293 [SCOI2016]美味 主席树 + 伪01trie

    传送门 文章目录 题意: 思路: 题意: 思路: 看到异或的话,很容易想到用01trie来贪心的搞,但是这个题涉及区间问题,直接搞的话需要将[l,r][l,r][l,r]的数都插入trie里面,这样的 ...

  9. 【bzoj4571SCOI2016美味】

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

  10. mysql 添加分区_创建,增加,删除mysql表分区

    1.测试添加分区和删除分区 ###添加删除range分区 (1)创建一个分区: CREATE TABLE titles ( emp_no      INT NOT NULL, title        ...

最新文章

  1. 使用tensorflow建模LSTM的详细步骤通俗易懂解读
  2. 数据上移下移简单的存储过程
  3. getter方法的作用 vuex_Vuex入门篇——基本使用
  4. _D类、E类、F类冷藏车是什么意思?
  5. 设计前沿:25个设计师向您展示 iOS 7 界面
  6. java jigsaw_60秒内使用Java 9的Project Jigsaw的JavaFX HelloWorld
  7. Leetcode 648.单词替换
  8. java实现背包问题例子_动态规划(背包问题)java实现
  9. oracle concat函数用法_大白的函数笔记:文本合并就是这么简单,不会的快来学...
  10. 运维部门工作总结_部门动态 | 主动出击 超前谋划 全面做好园区网络运维工作...
  11. 30款油漆纹理Photoshop笔刷
  12. 仿真软件proteus点亮led实验
  13. 山东大学高频电子线路实验四 振幅调制与解调实验详解
  14. 解决LDAP客户端统一认证DirectoryEntry出现 Ox80005000的问题
  15. TCPMP-interface相关文件函数解析 -about.c
  16. java出名的外国文献_三大牛人看外国文献的方法(搜索无重复) - 论文投稿 - 小木虫 - 学术 科研 互动社区...
  17. 以太坊就是公链之王,不接受反驳
  18. c语言用while实现输出加法口诀表,「加法口诀」C语言编写一个加法口诀表 - 金橙教程网...
  19. 怎么查看当前登录的svn账号_svn 用户名,密码 查看/删除方法
  20. MIMO中SM系统原理与仿真

热门文章

  1. 如何画好一套线性图标
  2. JS判断是否在微信浏览器打开
  3. 提取身份证信息的自定义函数
  4. [VC++]菜鸟问与答(指针)
  5. 赛尔笔记 | 事件间因果关系方向数据调研
  6. 百度盘搜失效?这款网盘搜索神器万万别错过!
  7. 那个高产似母猪的复旦计算机硕士
  8. 知识图谱最新研究综述
  9. 每日算法系列【LeetCode 685】冗余连接 II
  10. x86基础之数与数据类型