Description

“~妖梦,我又饿了!”
魂魄妖梦身为西行寺家的专属庭师第二代兼大小姐的西行寺幽幽子的护卫,却承担了为幽幽子准备食物的任务。幽幽子是个非常贪吃的亡灵,所以妖梦经常为食物的问题所困。
现在,妖梦有n盘食物排成一排,第i盘食物有一个属性a[i]。亡灵的体质比较特殊,所以妖梦认为食物的属性很重要。妖梦会进行q次询问,每次给出两个整数r,k,她想知道有多少个区间[i,r](1≤i≤r),区间内所有食物属性值的异或大于等于k。
30%:n,q≤1000
另有30%数据:n≤1000且询问的r是不下降的
100%:1≤n,q≤100000 r≤n 0≤k,a[i]≤1,000,000,000

Analysis

考虑暴力,30%很简单。
根据60%的思路,对于任意数据可以优化成离线,把询问按r排序。然后随便乱搞。
可是,满分做法还要优化,跟着离线的想法。
对于这种题,很经典的思路是弄一个Trie,然后xor在Trie上加入,查询,从左到右边扫边加入边查询。

Code

#include<cstdio>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,b,a) for(int i=b;i>=a;i--)
using namespace std;
typedef long long ll;
const int N=100010;
int num;
ll a[N],c[N],sx[N],ans[N];
struct node
{int r,pos;ll k;
}b[N];
struct trie
{ll sm;int _0,_1;
}tr[N*31];
bool cmp(node a,node b){return a.r<b.r;}
void add(ll x)
{int v=1;fd(d,31,0){tr[v].sm++;if(x&(1<<d)){if(!tr[v]._1) tr[v]._1=++num;v=tr[v]._1;}else{if(!tr[v]._0) tr[v]._0=++num;v=tr[v]._0;}if(!d) tr[v].sm++;}
}
ll query(ll ar,ll k)
{int v=1;ll t=0;fd(d,31,0){int x=ar&(1<<d),y=k&(1<<d);if(y){if(x) v=tr[v]._0;else v=tr[v]._1;}else{if(x) t+=tr[tr[v]._0].sm,v=tr[v]._1;else t+=tr[tr[v]._1].sm,v=tr[v]._0;}if(!d) t+=tr[v].sm;}return t;
}
int main()
{freopen("food.in","r",stdin);freopen("food.out","w",stdout);int n,m,pos;scanf("%d",&n);fo(i,1,n){scanf("%lld",&a[i]);sx[i]=sx[i-1]^a[i];}scanf("%d",&m);fo(i,1,m) scanf("%d %lld",&b[i].r,&b[i].k),b[i].pos=i;sort(b+1,b+m+1,cmp);int r=0;num=1;fo(i,1,m){while(r<b[i].r) add(sx[r++]);ans[b[i].pos]=query(sx[b[i].r],b[i].k);}fo(i,1,m) printf("%lld\n",ans[i]);return 0;
}

【JZOJ 4598】 准备食物相关推荐

  1. 【JZOJ 4598】准备食物

    Description "~妖梦,我又饿了!" 魂魄妖梦身为西行寺家的专属庭师第二代兼大小姐的西行寺幽幽子的护卫,却承担了为幽幽子准备食物的任务.幽幽子是个非常贪吃的亡灵,所以妖梦 ...

  2. JZOJ 5461 购物 —— 贪心

    题目:https://jzoj.net/senior/#main/show/5461 贪心,原来想了个思路,优先选优惠价最小的 K 个,然后其他按原价排序遍历: 如果当前物品没选过,原价选上,如果选过 ...

  3. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  4. [jzoj NOIP2018模拟 11.01]

    很庆幸打了这场模拟赛,因为这一场爆零 好像上次纪中的某场比赛我也出现了同样的问题,光是计算时间复杂度而忘记了空间的限制.想必是比上次惨的,考场上就写了两题而这两题都因为MLE爆零了.而且我T2还码了7 ...

  5. 【DP】小学生语文题(jzoj 5102)

    正题 jzoj 5102 题目大意 给你两个串A,B,字母个数相等,可以把B的一个字符移到前面某个位置,问你最少移多少次可以使A,B相等 解题思路 设fi,jf_{i,j}fi,j​为A匹配了i-n, ...

  6. 【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

    正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数:si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据,表示在sis_isi​加1, ...

  7. 【归并排序】奶牛的图片(jzoj 1812)

    奶牛的图片 jzoj 1812 题目大意 给你一个序列,你可以交换相邻的两个数 让你用最少的交换次数来使得这个序列变成形如a+1,a+2...n,1,2...a−1,aa+1,a+2...n,1,2. ...

  8. 【归并排序】休息(jzoj 3462)

    休息 jzoj 3462 题目大意 给你一个序列,你每一回合把它划分成尽可能少的单调递减的序列(第一次划分到的序列长度都是偶数),然后把每个序列翻转,问你把它变成单调递增的序列要翻转多少次 输入样例 ...

  9. 秀姿势(jzoj 3464)

    秀姿势 jzoj 3464 题目大意 有n个数,每个数都有一个分组,现在问你最多去掉k个分组后,做多有多少个数是连续的同组的 输入样例 9 1 2 7 3 7 7 3 7 5 7 输出样例 4 样例解 ...

最新文章

  1. 华为云客户端_效果图云渲染已成趋势,云渲染如何选择?
  2. android 支付宝 40247,支付宝 app支付异常摘记 -- ALI40247
  3. ANSI C and Microsoft C++中常用的预定义宏以及 宏定义中 # 和 ## 的区别
  4. 那些年我们一起写过的Python爬虫
  5. pycharm多行代码同时注释、去除注释
  6. 关于echar彩色柱状图颜色配置问题
  7. adb 黑域app_黑域ADB报错解决方法
  8. rxtx for java_RXTX实现JAVA串口编程
  9. 如何快速连接无线Wifi 使用二维码
  10. 设计四位移位寄存器shifter_4
  11. 微信浮窗是不是服务器保存,微信浮窗,真能解决小程序留存难题吗?
  12. 统计分析软件_强大的多元统计分析软件-Mplus
  13. 【爬虫】抓取msdn.itellyou.cn所有操作系统镜像下载链接
  14. 获取交换机和PC网卡接口对应关系
  15. SAP OB08汇率的计算-转换因子
  16. canvas绘制笑脸
  17. 零基础自学R语言 1 R语言介绍 1.5 RStudio软件
  18. 从几何角度切入最近邻
  19. MYSQL函数YEAR,MONTH,QUARTER,WEEK用法
  20. python idle运行显示找不到指定文件_Robotframework ride ,运行后提示, [WinError 2] 系统找不到指定的文件。...

热门文章

  1. 使用路由器上网微信qq绝地求生腾讯系打开慢或打不开的问题
  2. 搭建SPA项目SPA项目中使用路由嵌套路由
  3. vue实现鼠标拖拽div滚动效果-vue-dragscroll(整理)
  4. 命中有时终须有,命中无时莫强求--命理理论
  5. 【经典论文解读】YOLO 目标检测
  6. 该计算机已安装了更高版本的,电脑安装iTunes时提示这台电脑已安装了更高版本怎么解决...
  7. Linux图形子系统
  8. 用c语言如何以图形方式显示家谱,数据结构_家谱管理系统
  9. pc机之间的通信和点阵汉字的字模读取与显示
  10. win7下安装myODBC和使用