bzoj 4571 美味 —— 主席树
题目: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 美味 —— 主席树相关推荐
- P3293 [SCOI2016]美味 主席树 + 伪01trie
传送门 文章目录 题意: 思路: 题意: 思路: 看到异或的话,很容易想到用01trie来贪心的搞,但是这个题涉及区间问题,直接搞的话需要将[l,r][l,r][l,r]的数都插入trie里面,这样的 ...
- [BZOJ 4571][Scoi2016]美味(主席树)
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 ...
- BZOJ 3277 串 BZOJ 3473 字符串 (广义后缀自动机、时间复杂度分析、启发式合并、线段树合并、主席树)...
标签那么长是因为做法太多了... 题目链接: (bzoj 3277) https://www.lydsy.com/JudgeOnline/problem.php?id=3277 (bzoj 3473) ...
- BZOJ 3218 UOJ #77 A+B Problem (主席树、最小割)
BZOJ 3218 UOJ #77 A+B Problem (主席树.最小割) 大名鼎鼎的A+B Problem, 主席树优化最小割-- 调题死活调不对,一怒之下改了一种写法交上去A了,但是改写法之后 ...
- BZOJ 2588 Spoj 10628 Count on a tree | 树上主席树
BZOJ 2588 Count on a tree 题面 求树上两点之间路径上第k大的点权. 题解 一开始看到这道题觉得是树剖,然后又听说是主席树,然后以为是主席树+树剖,差点没吓死-- 然后发现,如 ...
- BZOj #4771. 七彩树(主席树+dfn序+lca)
BZOj #4771. 七彩树 description solution code description 给定一棵n个点的有根树,编号依次为1到n,其中1号点是根节点.每个节点都被染上了某一种颜色, ...
- BZOJ #2874. 训练士兵(差分+离散化+主席树)
BZOJ #2874. 训练士兵 description solution code description Ryz正在着手于训练一批精锐士兵 Ryz手下有n*m个士兵,排成一个n行m列的方阵.在一天 ...
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树状数组套主席树)
http://www.lydsy.com/JudgeOnline/problem.php?id=1901 首先还是吐槽时间,我在zoj交无限tle啊!!!!!!!!我一直以为是程序错了啊啊啊啊啊啊. ...
- trie树上值域化建主席树 查询异或平移最小值 ---- P3293 [SCOI2016]美味
题目大意: 解题思路: 首先我们知道区间查询异或最小值肯定是在trie是匹配 而且如果没有(aj+xi)(aj+xi)(aj+xi)就是一个可持久化Trie树上面的裸题了 但是很不幸有 怎么办呢? 首 ...
- BZOJ 3524主席树裸题 (雾)
思路: 按权值建一棵主席树 (但是这好像不是正解 空间复杂度是不对的--.) //By SiriusRen #include <cstdio> #include <cstring&g ...
最新文章
- (C++)1023 组个最小数 简单贪心
- java的知识点运用_Java--知识点运用
- Linux常用命令——fsck
- 发展医疗大数据 需捅破各层窗户纸
- 夏季十一款降温饮料的制作方法
- reactjs入门示例
- Python内置函数总结
- 外卖类应用的竞争与趋势
- R语言t检验中手动计算t值和p值
- 服务器命令压缩文件,使用linux的zip命令压缩文件
- linux的核心安装下的命令行,linux lilo命令参数及用法详解--linux安装核心载入,开机管理程...
- 电脑上怎么设置时间提醒?有哪些电脑桌面时钟提醒便签?
- 超精细写实的3D人物模型,这可不是照片!
- 获取股票交易数据的Tushare的使用方法
- 众昂矿业助力萤石氟化工产业链破竹般发展
- 微信公众号推送功能代码及详解
- 力扣 6009. 使两字符串互为字母异位词的最少步骤数
- ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732
- 如何快速搭建”疫情问答“小助手服务
- 易语言对象--Word之精确定位表格单元格中并写入文本
热门文章
- 拓端tecdat|matlab如何滤除低频尖峰脉冲
- Java学习(21-25天, 树与二叉树)
- PIL与opencv相互转换
- AttributeError: ‘Polygon‘ object has no property ‘normed‘
- python np数组中括号里面‘:n‘与‘n:‘什么意思
- version `GLIBCXX_3.4.22‘ not found
- 深度学习新星 | 图卷积神经网络(GCN)有多强大?
- python生成指定年份所有的天,并计算每天属于一年的第几周和周几
- python找出列表间隐含的关联关系以及重复模式
- Ubuntu16.04 Jupyter安装(Ipython Notebook安装)