经典问题,按位贪心,每次需要知道的是”在这一位之前的位都以确定的情况下,能否找到这一位是0/1的数”,这就是在询问[L,R]内某个值域区间是否有数,主席树即可。

 #include<cstdio>
#include<algorithm>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
using namespace std; const int N=,M=;
int n,m,b,x,l,r,nd,rt[N],a[N],ls[N*],rs[N*],v[N*]; void ins(int &x,int y,int L,int R,int pos){
x=++nd; v[x]=v[y]+; ls[x]=ls[y]; rs[x]=rs[y];
if (L==R) return;
int mid=(L+R)>>;
if (pos<=mid) ins(ls[x],ls[y],L,mid,pos);
else ins(rs[x],rs[y],mid+,R,pos);
} int que(int x,int y,int L,int R,int l,int r){
if (L==l && r==R) return v[y]-v[x];
int mid=(L+R)>>;
if (r<=mid) return que(ls[x],ls[y],L,mid,l,r);
else if (l>mid) return que(rs[x],rs[y],mid+,R,l,r);
else return que(ls[x],ls[y],L,mid,l,mid)+que(rs[x],rs[y],mid+,R,mid+,r);
} int main(){
freopen("bzoj4571.in","r",stdin);
freopen("bzoj4571.out","w",stdout);
scanf("%d%d",&n,&m);
rep(i,,n) scanf("%d",&a[i]),ins(rt[i],rt[i-],,M,a[i]);
rep(i,,m){
scanf("%d%d%d%d",&b,&x,&l,&r); int a=;
for (int j=; ~j; j--){
if (!(b&(<<j))) a|=<<j;
int L=max(a-x,),R=(a|((<<j)-))-x;
if (R< || !que(rt[l-],rt[r],,M,L,R)) a^=<<j;
}
printf("%d\n",a^b);
}
return ;
}

最新文章

  1. 一个简单的消息提示jquery插件
  2. Loogn.OrmLite映射优化记录
  3. 图像处理之常用颜色RGB、灰度值
  4. YUV主要采样格式理解
  5. windows下mysql5.7安装及配置
  6. 【转】转移Package Cache文件夹,转移Windows Installer文件夹
  7. Python自动化运维之28、Django(二)
  8. 如何把iOS代码编译为Android应用
  9. (五)带属性值的ng-app指令,实现自己定义模块的自己主动载入
  10. Flask 中的 SQLAlchemy 使用教程
  11. 安装TDM-GCC
  12. iOS 属性之assign、copy、retain
  13. Python从入门到放弃之迭代器
  14. 用户输入与while循环
  15. WinCE的C#编程,对float型进行四舍五入保留两位小数,小数进行四舍五入操作,Math.Round的应用案例。
  16. java日志规约及配置示例终极总结
  17. Excel VBA附合导线平差自动计算表
  18. getWidth()和getMeasuredWidth()的区别
  19. Django实现邮件发送功能
  20. mybatis oracle 插入自增记录 获取主键值 写回map参数

热门文章

  1. JS获取元素内容属性以及修改
  2. 关于Java IO与NIO知识都在这里
  3. C++学习之路(十一):C++的初始化列表
  4. 微信web开发者工具无法打开的解决方法
  5. 二叉树前中后/层次遍历的递归与非递归形式(c++)
  6. 16 Go Concurrency Patterns: Timing out, moving on GO并发模式: 超时, 继续前进
  7. git —— 异常1,index.lock
  8. 关闭linux退格键和vi发出的嘟嘟声
  9. Gitflow工作流
  10. 编译环境搭建:Makefile