这道题想了好几天了。。。可持久化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. iPhone XS MAX全球首碎!一看官方维修价 网友:修不起!
  2. 在线实时大数据平台Storm并行度试验
  3. CodeDay#7 启动 | 北京欢迎你
  4. Python循环遍历(cycle)
  5. 从首席电力官到首席智能官:紧随时代,不断升级
  6. Silverlight:纠结的快捷键问题
  7. Excel图表之道—如何制作专业有效的商务图表(远离难看的图表,让客户满意,给自己加薪)...
  8. 三国演义python分析系统_Python之三国演义(上)
  9. 阿里云ECS云服务器--安装部署MySQL(图文)
  10. 《深度剖析U8系统前后台数据关系》课程简介
  11. 汉语教学备课工具推荐
  12. 计算机网络知识点整理(笔试面试)
  13. ​深圳国际会展中心希尔顿、茂名浪漫海岸喜来登度假、南昌青山湖希尔顿欢朋酒店开业 | 中国酒店周刊...
  14. 苹果电脑Mac中delete键的七种用法
  15. AgentWeb 介绍
  16. 三种Android图片压缩方法 压缩到指定大小
  17. 谁若97岁死,奈何桥上等3年
  18. 医药管理信息系统(javaWeb)
  19. 科普】华为手机支付保护中心有什么用?
  20. 毕业3年,从中软外包跳槽到京东集团,年薪翻倍,我经历了什么?

热门文章

  1. http://jingyan.baidu.com/article/fcb5aff78e6a48edab4a7146.html
  2. C语言杂记-vector 、 stack and queue
  3. ACL2021奇葩标题大赏
  4. 7万硕士、21万本科生在送外卖,是自愿还是工作难找无奈之举?
  5. 【每日算法Day 101】字节跳动 AI Lab 精选面试编程题
  6. poj3262(Protecting the Flowers)贪心
  7. 从零实现深度学习框架——逻辑回归简介
  8. 数据分析师如何正确地提意见?
  9. 瞥一瞥AI,撩一撩算法
  10. 5分钟轻松学Python:4行代码写一个爬虫