BZOJ 4571 【SCOI2016】 美味
题目链接:美味
如果题目里面没有那个\(a_i\),这道题就可以直接在\(Trie\)树上走一走就做完了。现在多了个\(a_i\),\(Trie\)树就无能为力了。
我们考虑一下在\(Trie\)树上走的过程。我们从高位往低位按位贪心,每次判定这一位能否取\(1\),本质上就是在判定某个区间内有没有数。所以我们把这个区间弄出来,在主席树上查询一下就可以了。这样就可以把那个\(a_i\)给考虑进来了。
下面贴代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define maxn 200010
#define MAXN 5000010 using namespace std;
typedef long long llg; int n,m,rt[maxn],a[maxn],_m,tt;
int sumv[MAXN],le[MAXN],ri[MAXN],L,R,_sum; int getint(){
int w=0;bool q=0;
char c=getchar();
while((c>'9'||c<'0')&&c!='-') c=getchar();
if(c=='-') c=getchar(),q=1;
while(c>='0'&&c<='9') w=w*10+c-'0',c=getchar();
return q?-w:w;
} int build(int u,int l,int r){
int mid=(l+r)>>1,v=++tt;
le[v]=le[u],ri[v]=ri[u],sumv[v]=sumv[u]+1;
if(l!=r){
if(L<=mid) le[v]=build(le[u],l,mid);
else ri[v]=build(ri[u],mid+1,r);
}
return v;
} void query(int u,int v,int l,int r){
int mid=(l+r)>>1;
if(l>=L && R>=r){_sum+=sumv[v]-sumv[u];return;}
if(L<=mid) query(le[u],le[v],l,mid);
if(R>mid) query(ri[u],ri[v],mid+1,r);
} bool ask(int u,int v,int l,int r){
L=max(l,0); R=min(r,_m);
if(L>R) return 0; _sum=0;
query(rt[u-1],rt[v],0,_m);
return _sum!=0;
} int main(){
File("a");
n=getint(),m=getint();
for(int i=1;i<=n;i++) _m=max(_m,a[i]=getint());
for(int i=1;i<=n;i++) L=a[i],rt[i]=build(rt[i-1],0,_m);
while(m--){
int b=getint(),x=getint();
int l=getint(),r=getint(),ans=0;
for(int i=17;i>=0;i--){
int now=ans+((1^(b>>i&1))<<i);
if(ask(l,r,now-x,now+(1<<i)-1-x)) ans=now;
else ans+=(b>>i&1)<<i;
}
printf("%d\n",ans^b);
}
return 0;
}
BZOJ 4571 【SCOI2016】 美味的更多相关文章
- BZOJ 4571: [Scoi2016]美味
二次联通门 : BZOJ 4571: [Scoi2016]美味 /* BZOJ 4571: [Scoi2016]美味 dalao们都在说这题如果没有加法balabala就可以用可持久化trie解决了 ...
- bzoj 4571: [Scoi2016]美味 (主席树)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 题面; 4571: [Scoi2016]美味 Time Limit: 30 Sec ...
- bzoj 4571 [Scoi2016]美味——主席树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4571 按位考虑,需要的就是一个区间:比如最高位就是(2^k -x). 对于不是最高位的位置该 ...
- BZOJ.4571.[SCOI2016]美味(主席树 贪心)
题目链接 要求 \(b\ xor\ (a_j+x)\) 最大,应让 \(a_j+x\) 的最高位尽可能与b相反.带个减法Trie树好像很难做?反正我不会. 从最高位开始,如果这位b是0/1,判断是否存 ...
- 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][ ...
- bzoj [Scoi2016]美味
[Scoi2016]美味 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 721 Solved: 391[Submit][Status][Discus ...
- [洛谷P3293] [SCOI2016]美味
洛谷题目链接:[SCOI2016]美味 题目描述 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1<=i<=n).有 m 位顾客,第 i 位顾客的期望值为 ...
- 【BZOJ4571】[Scoi2016]美味 主席树
[BZOJ4571][Scoi2016]美味 Description 一家餐厅有 n 道菜,编号 1...n ,大家对第 i 道菜的评价值为 ai(1≤i≤n).有 m 位顾客,第 i 位顾客的期望值 ...
- BZOJ 4570: [Scoi2016]妖怪
二次联通门 : BZOJ 4570: [Scoi2016]妖怪 二次联通门 : luogu P3291 [SCOI2016]妖怪 LibreOJ : LibreOJ #2015. 「SCOI2016 ...
随机推荐
- lua的文件管理
lua没有自己的文件管理 只有读取和写入文件,但是可以通过调用lfs(LuaFileSystem),lfs是一个 用于lua进行文件访问的库,支持lua5.1和lua5.2,并且跨平台 lfs的使用: ...
- python写http post请求的四种请求体
Web自动化测试(25) HTTP 协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式.常见的四种编码方式如下: 1.appli ...
- Input消除自动记忆功能
在html里就可以直接清除了<input type="text" autocomplete="off"> input 的autocomplete属性 ...
- 如何实现parseFloat保留小数点后2位
Number.toPrecision(2);function toPrecision ( [precision : Number] ) : String参数 precision 可选项.有效位数.值必 ...
- 深入理解php内核——读书笔记1
第一章 基础准备 宏定义 #字符串化 ##连接符 do{}while(0) 多行 全局宏: EG.PG 第二章 用户代码的执行 php请求的生命周期 SAPI接口 php脚本执行 第三章 变量及数据类 ...
- sql server数字转字符串出现科学计数法
在从excel往sql server导入数据,电话.编号等数字呈现float类型,然后向b表中insert后(phone为nvarchar)出现科学计数法,解决方法:需将float等数据类型转为标准的 ...
- ACM数论之旅10---大组合数-卢卡斯定理(在下卢卡斯,你是我的Master吗?(。-`ω´-) )
记得前几章的组合数吧 我们学了O(n^2)的做法,加上逆元,我们又会了O(n)的做法 现在来了新问题,如果n和m很大呢, 比如求C(n, m) % p , n<=1e18,m<=1e18 ...
- 如何获得当前页的SITECORE上下文
当你开始任何项目,你需要首先要做的是了解当前页面的信息向网站用户显示相关页面数据.在今天的教程中,我将介绍一些基本的API调用的实现. Sitecore的实例 获得有关当前项目的信息,您可以使用Sit ...
- Intro to Python for Data Science Learning 8 - NumPy: Basic Statistics
NumPy: Basic Statistics from:https://campus.datacamp.com/courses/intro-to-python-for-data-science/ch ...
- sql when null 判断
Sql Server 中使用case when then 判断某字段是否为null,和判断是否为字符或数字时的写法不一样,如果不注意,很容易搞错 错误方法: CASE columnName WHEN ...