题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571

区间找异或值最大,还带加法,可以用主席树;

可以按位考虑,然后通过加上之前已经有的答案、减去题目给的那个 x ,得到满足这一位最大的值的范围,查找一下有没有即可;

注意如果写 b&(1<<j) ,这个不仅是 0 或 1!所以用个 bool 类型存下来。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define mid ((l+r)>>1)
using namespace std;
int const xn=2e5+5,mx=(1<<18)-1,xm=xn*20;
int n,m,cnt,sum[xm],ls[xm],rs[xm],rt[xn];
int rd()
{int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();return f?ret:-ret;
}
void insert(int &x,int y,int l,int r,int v)
{x=++cnt;sum[x]=sum[y]+1; ls[x]=ls[y]; rs[x]=rs[y];if(l==r)return;if(v<=mid)insert(ls[x],ls[y],l,mid,v);else insert(rs[x],rs[y],mid+1,r,v);
}
int query(int x,int y,int l,int r,int L,int R)
{if(l>=L&&r<=R)return sum[y]-sum[x];int ret=0;if(mid>=L)ret+=query(ls[x],ls[y],l,mid,L,R);if(mid<R)ret+=query(rs[x],rs[y],mid+1,r,L,R);return ret;
}
int main()
{n=rd(); m=rd();for(int i=1,x;i<=n;i++){x=rd();insert(rt[i],rt[i-1],0,mx,x);}for(int i=1,b,x,l,r,ans;i<=m;i++){b=rd(); x=rd(); l=rd(); r=rd(); ans=0;for(int j=17;j>=0;j--){int L,R; bool k=(b&(1<<j));//bool!!if(k)//这一位应填0L=max(ans-x,0),R=min(ans-x+(1<<j)-1,mx);else L=max(ans-x+(1<<j),0),R=min(ans-x+(1<<(j+1))-1,mx);if(L<=R&&query(rt[l-1],rt[r],0,mx,L,R))ans+=(1<<j)*(k^1);else ans+=(1<<j)*k;}printf("%d\n",ans^b);}return 0;
}

转载于:https://www.cnblogs.com/Zinn/p/9726407.html

bzoj 4571 美味 —— 主席树相关推荐

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

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

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

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

  3. BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析、启发式合并、线段树合并、主席树)...

    标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...

  4. BZOJ 3218 UOJ #77 A+B Problem (主席树、最小割)

    BZOJ 3218 UOJ #77 A+B Problem (主席树.最小割) 大名鼎鼎的A+B Problem, 主席树优化最小割-- 调题死活调不对,一怒之下改了一种写法交上去A了,但是改写法之后 ...

  5. BZOJ 2588 Spoj 10628 Count on a tree | 树上主席树

    BZOJ 2588 Count on a tree 题面 求树上两点之间路径上第k大的点权. 题解 一开始看到这道题觉得是树剖,然后又听说是主席树,然后以为是主席树+树剖,差点没吓死-- 然后发现,如 ...

  6. BZOj #4771. 七彩树(主席树+dfn序+lca)

    BZOj #4771. 七彩树 description solution code description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色, ...

  7. BZOJ #2874. 训练士兵(差分+离散化+主席树)

    BZOJ #2874. 训练士兵 description solution code description Ryz正在着手于训练一批精锐士兵 Ryz手下有n*m个士兵,排成一个n行m列的方阵.在一天 ...

  8. 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...

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

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

  10. BZOJ 3524主席树裸题 (雾)

    思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...

最新文章

  1. (C++)1023 组个最小数 简单贪心
  2. java的知识点运用_Java--知识点运用
  3. Linux常用命令——fsck
  4. 发展医疗大数据 需捅破各层窗户纸
  5. 夏季十一款降温饮料的制作方法
  6. reactjs入门示例
  7. Python内置函数总结
  8. 外卖类应用的竞争与趋势
  9. R语言t检验中手动计算t值和p值
  10. 服务器命令压缩文件,使用linux的zip命令压缩文件
  11. linux的核心安装下的命令行,linux lilo命令参数及用法详解--linux安装核心载入,开机管理程...
  12. 电脑上怎么设置时间提醒?有哪些电脑桌面时钟提醒便签?
  13. 超精细写实的3D人物模型,这可不是照片!
  14. 获取股票交易数据的Tushare的使用方法
  15. 众昂矿业助力萤石氟化工产业链破竹般发展
  16. 微信公众号推送功能代码及详解
  17. 力扣 6009. 使两字符串互为字母异位词的最少步骤数
  18. ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732
  19. 如何快速搭建”疫情问答“小助手服务
  20. 易语言对象--Word之精确定位表格单元格中并写入文本

热门文章

  1. 拓端tecdat|matlab如何滤除低频尖峰脉冲
  2. Java学习(21-25天, 树与二叉树)
  3. PIL与opencv相互转换
  4. AttributeError: ‘Polygon‘ object has no property ‘normed‘
  5. python np数组中括号里面‘:n‘与‘n:‘什么意思
  6. version `GLIBCXX_3.4.22‘ not found
  7. 深度学习新星 | 图卷积神经网络(GCN)有多强大?
  8. python生成指定年份所有的天,并计算每天属于一年的第几周和周几
  9. python找出列表间隐含的关联关系以及重复模式
  10. Ubuntu16.04 Jupyter安装(Ipython Notebook安装)