BZOJ4571:[SCOI2016]美味
浅谈主席树:https://www.cnblogs.com/AKMer/p/9956734.html
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4571
直接从高位到低位贪心。我们可以一位一位确定还没与\(b\)异或起来的\(ans\),最后再与\(b\)异或。假设前面的高位确定完之后,根据当前位贪心需要什么,可以在一段区间内找到我们需要的数字。如果存在,那么这一位就是贪心的结果,否则就是另一种。在一段区间内找值域在某一段区间的数字,正好可以用主席树搞定。
时间复杂度:\(O(nlognlogv)\)
空间复杂度:\(O(nlogv)\)
代码如下:
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=2e5+5;
int n,m;
int rt[maxn];
int read() {
int x=0,f=1;char ch=getchar();
for(;ch<'0'||ch>'9';ch=getchar())if(ch=='-')f=-1;
for(;ch>='0'&&ch<='9';ch=getchar())x=x*10+ch-'0';
return x*f;
}
struct tree_node {
int cnt,ls,rs;
};
struct chairman_tree {
int tot;
tree_node tree[maxn*18];
void ins(int lst,int &now,int l,int r,int pos) {
now=++tot;tree[now]=tree[lst];
tree[now].cnt++;
if(l==r)return;
int mid=(l+r)>>1;
if(pos<=mid)ins(tree[lst].ls,tree[now].ls,l,mid,pos);
else ins(tree[lst].rs,tree[now].rs,mid+1,r,pos);
}
int query(int x,int y,int l,int r,int L,int R) {
if(L<=l&&r<=R)return tree[y].cnt-tree[x].cnt;
int mid=(l+r)>>1,res=0;
if(L<=mid)res+=query(tree[x].ls,tree[y].ls,l,mid,L,R);
if(R>mid)res+=query(tree[x].rs,tree[y].rs,mid+1,r,L,R);
return res;
}
}T;
int main() {
n=read(),m=read();
for(int i=1;i<=n;i++) {
int x=read();
T.ins(rt[i-1],rt[i],0,1e5,x);
}
for(int i=1;i<=m;i++) {
int b=read(),x=read(),l=read(),r=read(),ans=0;
for(int j=17;~j;j--) {
int L,R,bit;
if(b&(1<<j))L=ans,R=ans+(1<<j)-1,bit=0;
else L=ans+(1<<j),R=ans+(1<<(j+1))-1,bit=1;
L=max(L-x,0);R=min(100000,R-x);
bool bo=T.query(rt[l-1],rt[r],0,1e5,L,R);
if(!bo)bit^=1;ans|=bit<<j;
}ans^=b;
printf("%d\n",ans);
}
return 0;
}
BZOJ4571:[SCOI2016]美味的更多相关文章
- bzoj4571: [Scoi2016]美味
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MB Submit: 275 Solved: 141 [Submit][Status][ ...
- 【bzoj4571&&SCOI2016美味】
4571: [Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 656 Solved: 350[Submit][Status][ ...
- BZOJ4571:[SCOI2016]美味(主席树,贪心)
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值为 bi,而他的偏好值为 xi . 因此,第 ...
- [BZOJ4571][SCOI2016]美味(贪心+主席树)
经典问题,按位贪心,每次需要知道的是”在这一位之前的位都以确定的情况下,能否找到这一位是0/1的数”,这就是在询问[L,R]内某个值域区间是否有数,主席树即可. #include<cstdio& ...
- BZOJ4571: [Scoi2016]美味【主席树】【贪心】
Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 ...
- BZOJ4571 [Scoi2016]美味 【主席树】
题目 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 bi,而他的偏好值为 xi .因此,第 i 位顾客认为第 ...
- 2018.10.14 bzoj4571: [Scoi2016]美味(主席树)
传送门 自认为是一道思想很妙的题. 直接分析问题. 如果没有xxx的干扰直接上可持久化01trie01trie01trie走人. 但现在有了xxx这个偏移量. 相当于把整个01trie01trie01 ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- 【BZOJ4571】美味(主席树)
[BZOJ4571]美味(主席树) 题面 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期 望值为 ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
随机推荐
- 如何在linux centos下安装git(转)
今天想开通github的服务,于是在服务器上安装git,百度到的结果千篇一律的全都有错误,给大家总结分享下. 如果yum install git可以直接安装的可以不通过源码编译安装. 源码安装步骤如下 ...
- ASP.NET动态网站制作(4)--css(3)
前言:这节课主要运用前面所学的知识写三个例子,并且学习浏览器兼容性的解决方法. 内容: 例子1:一个关于列表的例子 html代码: <!DOCTYPE html PUBLIC "-// ...
- yii2学习笔记
之前看过Yii2框架,也在其他框架实现其Gii手脚架功能,现在开始使用Yii做项目,顺便记录一下学习笔记 先推荐一个网址 Yii2速查表(中文版)http://nai8.me/tool-sc.html ...
- 《Java设计模式》之构建者模式
概述: 构造者模式(Builder Pattern):构造者模式将一个复杂对象的构造过程和它的表现层分离开来.使得相同的构建过程能够创建不同的表示,又称为生成器模式. Bu ...
- ArcGIS api for js OverviewMap(鹰眼/概览图)
说明.本篇博客中主要介绍 地图显示在某个div情况 1.运行效果 2.HTML <!DOCTYPE html> <html> <head> <meta htt ...
- MarkdownPad - The Markdown Editor for Windows http://markdownpad.com/
MarkdownPad - The Markdown Editor for Windows http://markdownpad.com/
- 图床QAQ
- 流畅的python学习笔记:第十一章:抽象基类
__getitem__实现可迭代对象.要将一个对象变成一个可迭代的对象,通常都要实现__iter__.但是如果没有__iter__的话,实现了__getitem__也可以实现迭代.我们还是用第一章扑克 ...
- Java反射详解(转)
原文地址:http://www.importnew.com/17616.html 动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化.比如众所 ...
- matlab 在机器视觉中常用的函数
~ triangulate() 三角化(获得距离)匹配点 ~ undistortImage() 去除相机畸变并生成图像