【JZOJ4598】准备食物
Description
“~妖梦,我又饿了!”
魂魄妖梦身为西行寺家的专属庭师第二代兼大小姐的西行寺幽幽子的护卫,却承担了为幽幽子准备食物的任务。幽幽子是个非常贪吃的亡灵,所以妖梦经常为食物的问题所困。
现在,妖梦有n盘食物排成一排,第i盘食物有一个属性a[i]。亡灵的体质比较特殊,所以妖梦认为食物的属性很重要。妖梦会进行q次询问,每次给出两个整数r,k,她想知道有多少个区间[i,r](1≤i≤r),区间内所有食物属性值的异或大于等于k。
Solution
一开始,乱搞了一通,得出一个异或不等式,然后异或是不满足一般的不等式性质的,搞得我打完了主席树,打好了拍之后,出了个数组之后发现错了。
后来比赛还剩下40分钟的时候打完了第三题有看了一眼第二题:不是裸的字典树吗……
打了个可持久化trie成功搞了过去。
主要思路:[i,r]表示a[i] xor a[i+1] xor …… xor a[r],所以[i,r]=[1,i-1] xor [1,r],然后把数值[1,r]对trie进行xor操作,保证异或完的数≥k的方案数,在trie上如果k的二进制位是1,那么就只能异或成1,如果是0,加上异或成1的答案,在往异或成0的搜。
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define fo(i,a,b) for(i=a;i<=b;i++)
#define rep(i,a) for(i=first[a];i;i=next[i])
#define fod(i,a,b) for(i=a;i>=b;i--)
typedef long long ll;
using namespace std;
const int maxn=100007;
int i,j,k,l,n,m,num,p,da,root[maxn],ans;
int a[maxn],sum[maxn],er[maxn];
struct node{int sum,son[2];
}t[maxn*32];
void build(int x,int y,int z){int i;fod(i,31,1){int q=((z&er[i])>0);t[x].sum=t[y].sum+1;t[x].son[q^1]=t[y].son[q^1];t[x].son[q]=++num;x=num;y=t[y].son[q];}t[x].sum=t[y].sum+1;
}
void find(int x,int y,int z){int i;fod(i,31,1){int q=((y&er[i])>0),p=((z&er[i])>0);if(p){x=t[x].son[q^1];}else{ans+=t[t[x].son[1^q]].sum;x=t[x].son[q];}}ans+=t[x].sum;
}
int main(){freopen("food.in","r",stdin);freopen("food.out","w",stdout);scanf("%d",&n);fo(i,1,50)er[i]=1<<(i-1);fo(i,1,n)scanf("%d",&a[i]),sum[i]=sum[i-1]^a[i];build(root[0]=++num,0,0);fo(i,1,n)build(root[i]=++num,root[i-1],sum[i]);for(scanf("%d",&m);m;m--){scanf("%d%d",&k,&l);ans=0;find(root[k-1],sum[k],l);printf("%d\n",ans);}}
【JZOJ4598】准备食物相关推荐
- jzoj4598. 【NOIP2016模拟7.9】准备食物
一个th的题(a gensokyo) 难度系数在该知识点下为$2.1$ 区间xor我们很明显会想到trie树,将每一个区间$l~r$异或和拆成$sum[l-1]$ $sum[r]$两个数的异或 注意到 ...
- 【jzoj4598】【准备食物】【字典树】
题目大意 给出长度为n的序列,询问[1,r]的后缀区间[i,r] (1<=i,i<=r)异或和大于等于k的区间的个数. 题解 异或可逆,[i,r]等于[1,i-1]异或[1,r],设前缀和 ...
- 【JZOJ 4598】准备食物
Description "~妖梦,我又饿了!" 魂魄妖梦身为西行寺家的专属庭师第二代兼大小姐的西行寺幽幽子的护卫,却承担了为幽幽子准备食物的任务.幽幽子是个非常贪吃的亡灵,所以妖梦 ...
- 【JZOJ 4598】 准备食物
Description "~妖梦,我又饿了!" 魂魄妖梦身为西行寺家的专属庭师第二代兼大小姐的西行寺幽幽子的护卫,却承担了为幽幽子准备食物的任务.幽幽子是个非常贪吃的亡灵,所以妖梦 ...
- 网红快餐店_在一家快餐店工作解释了AJAX基础知识
网红快餐店 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 在一家快餐店工作解释了AJAX基础知识 (AJAX Basics Explained By Work ...
- DevOps是软件研发的洗碗机
原创:Brian Kelly(2019年8月12日发表的一篇博客文章).本文授权转载自公众号老丛讲桌,特此感谢. 最近一篇博客文章突然爆火,许多敏捷.精益.DevOps大咖都在转发这篇文章.Brain ...
- 在失败中学习,MIT新研究显示,机器可以像婴儿一样学会理解人类目标
大数据文摘出品 来源:MIT 编译:周熙 在Warneken和Tomasello关于人类社会智力的经典实验中,一个18月大蹒跚学步的幼儿看着一个男人抱着一堆书走向一个未开封的柜子.当男子到达柜子时,他 ...
- 要做服务和酒店行业的“领英” ,Industry 获得230万美元种子轮融资
提到职业社交网站,大多数人会首先想到领英.不过,虽然领英拥有超过4亿名会员,但并不意味着它能满足所有类型的工作. 比如说服务和酒店行业,需要的更多是视觉展现,像是厨师准备食物.调酒师准备饮品,单凭一张 ...
- java 抽象工厂工厂_Java设计模式之简单工厂、工厂方法和抽象工厂
学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:456544752我们一起学Java! 在前面的学习中(参见前面的博客),我们学到了很 ...
最新文章
- 【软件构造】第三章第三节 抽象数据型(ADT)
- MVC视图中处理Json
- 沈逸老师ubuntu速学笔记(2)-- ubuntu16.04下 apache2.4和php7结合编译安装,并安裝PDOmysql扩展...
- ES6特性之:Spread操作符
- 【uC/OS-II】笔记1----入门
- VSCode自定义代码片段13——Vue的状态大管家
- LeetCode(21)——合并两个有序链表(JavaScript)
- 用js实现图片的无缝滚动效果
- 计算机软件服务可以自开专票,可以自开专票的小规模纳税人到底有几类?
- 2021年春季学期期末统一考试电子商务概论(农) 试题
- GDB 的几个用法(until, finish, tui)
- Python数据 分析微信朋友圈
- 抽奖活动的高可用、高并发优化
- 手指和手势识别算法原理和解析
- tiny2440刷机步骤
- Fedora30 安装 WPS Office 2019 For Linux
- 约瑟夫环(循环数组循环链表)
- wordpress 静态化 linux,将Wordpress全站静态化
- java使用poi在word模板中替换柱状图、折线图、饼图、表格、文本、图片
- 三分钟了解,阁中物电商是什么样的平台
热门文章
- 各进制转换成十进制的方法
- 如何以聪明的方式提问
- 骁龙8gen1Plus和骁龙8gen1区别
- Spring项目中,为什么要区分PO对象,VO对象,DTO对象?有什么作用?
- Vue与Spring boot基于RSA非对称加密进行前后端交互
- ESP32开发路程WIFI篇——极简连接WIFI,模拟设备连接阿里云,ESP32连接阿里云
- 如何找到计算机上的画图拦,机子里的画图和计算机没有了
- 【Win32 API】GetPixel函数返回的颜色值不正确
- 全局zomm缩放后echarts鼠标偏移的问题(鼠标触发提示框位置有偏差)
- 家用计算机做raid 2018,让电脑速度翻倍的方法,手把手教你组建RAID!