题目描述

  给你一个长度为\(n\)数列\(a\),有\(m\)次操作:

   \(1~x\):把所有数异或\(x\)

   \(2~x\):把所有数与\(x\)

   \(3~x\):把所有数或\(x\)

   \(4~l~r~k\):求\(a_l\ldots a_r\)的第\(k\)小值。

  \(n,m\leq 50000,0\leq x,a_i<2^{31}\)

题解

  如果只有查询操作,可以用可持久化trie解决。

  加上亦或操作,可以打标记解决。

  与操作和或操作每次会将所有数的某些二进制变成一样,这些二进制位将来都是一样的。

  所以直接暴力执行操作,然后打标记,表示这些二进制位已经相同了。如果与操作或或操作的\(x\)修改的二进制位都已经相同,就直接跳过。

  时间复杂度:\(O(m\log x+n\log^2x)\)

代码

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<ctime>
#include<utility>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int c[20000010][2];
int s[20000010];
int rt[50010];
int cnt;
int xo;
int insert(int x,int v,int d)
{
int y=++cnt;
s[y]=s[x]+1;
c[y][0]=c[x][0];
c[y][1]=c[x][1];
if(d==-1)
return y;
int b=(v>>d)&1;
c[y][b]=insert(c[y][b],v,d-1);
return y;
}
int query(int x,int y,int k,int d)
{
if(d==-1)
return 0;
int b=(xo>>d)&1;
if(s[c[y][b]]-s[c[x][b]]>=k)
return query(c[x][b],c[y][b],k,d-1);
return query(c[x][b^1],c[y][b^1],k-s[c[y][b]]+s[c[x][b]],d-1)|(1<<d);
}
int a[50010];
int n,m;
int all=0xffffffff,now=0;
void build()
{
int i;
cnt=0;
rt[0]=0;
for(i=1;i<=n;i++)
rt[i]=insert(rt[i-1],a[i],31);
}
int main()
{
freopen("xsy1098.in","r",stdin);
freopen("xsy1098.out","w",stdout);
int i,j;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
build();
char op[5];
int x,y,k;
for(i=1;i<=m;i++)
{
scanf("%s",op);
if(op[0]=='X')
{
scanf("%d",&x);
xo^=x;
xo&=all;
now^=x&(~all);
}
else if(op[0]=='O')
{
scanf("%d",&x);
if(x&all)
{
all&=~x;
for(j=1;j<=n;j++)
a[j]&=all;
build();
}
now|=x&(~all);
xo&=all;
}
else if(op[1]=='n')
{
scanf("%d",&x);
if((~x)&all)
{
all&=x;
for(j=1;j<=n;j++)
a[j]&=all;
build();
}
now&=x&(~all);
xo&=all;
}
else
{
scanf("%d%d%d",&x,&y,&k);
int ans=query(rt[x-1],rt[y],k,31);
ans|=now;
printf("%d\n",ans);
}
}
return 0;
}

【XSY1098】第k小 可持久化trie的更多相关文章

  1. 区间第K小——可持久化线段树模板

    概念 可持久化线段树又叫主席树,之所以叫主席树是因为这东西是fotile主席创建出来的. 可持久化数据结构思想,就是保留整个操作的历史,即,对一个线段树进行操作之后,保留访问操作前的线段树的能力. 最 ...

  2. POJ- 2104 hdu 2665 (区间第k小 可持久化线段树)

    可持久化线段树 也叫函数式线段树也叫主席树,其主要思想是充分利用历史信息,共用空间 http://blog.sina.com.cn/s/blog_4a0c4e5d0101c8fr.html 这个博客总 ...

  3. HDU 2665.Kth number-可持久化线段树(无修改区间第K小)模板 (POJ 2104.K-th Number 、洛谷 P3834 【模板】可持久化线段树 1(主席树)只是输入格式不一样,其他几乎都一样的)

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. SPOJ-COT-Count on a tree(树上路径第K小,可持久化线段树)

    题意: 求树上A,B两点路径上第K小的数 分析: 同样是可持久化线段树,只是这一次我们用它来维护树上的信息. 我们之前已经知道,可持久化线段树实际上是维护的一个前缀和,而前缀和不一定要出现在一个线性表 ...

  5. 【XSY2720】区间第k小 整体二分 可持久化线段树

    题目描述 给你你个序列,每次求区间第\(k\)小的数. 本题中,如果一个数在询问区间中出现了超过\(w\)次,那么就把这个数视为\(n\). 强制在线. \(n\leq 100000,a_i<n ...

  6. 【COGS 1534】 [NEERC 2004]K小数 &&【COGS 930】 [河南省队2012] 找第k小的数 可持久化01Trie

    板子题,只是记得负数加fix最方便 #include <cstdio> ,N=; namespace FIFO { <<],*S=B,*T=B; #define getc() ...

  7. 树上第k小,可持久化线段树+倍增lca

    给定一颗树,树的每个结点都有权值, 有q个询问,每个询问是 u v k ,表示u到v路径上第k小的权值是多少. 每个结点所表示的线段树,是父亲结点的线段树添加该结点的权值之后形成的新的线段树 c[ro ...

  8. 【set】【可持久化Trie】The 16th UESTC Programming Contest Preliminary K - Will the circle be broken

    题意:You are given an array A of N non-negative integers and an integer M. Find the number of pair(i,j ...

  9. 可持久化Trie & 可持久化平衡树 专题练习

    [xsy1629]可持久化序列 - 可持久化平衡树 http://www.cnblogs.com/Sdchr/p/6258827.html [bzoj4260]REBXOR - Trie 事实上只是一 ...

随机推荐

  1. 学习用Node.js和Elasticsearch构建搜索引擎(3):使用curl命令操作elasticsearch

    使用Elasticsearch不免要提到curl工具,curl是利用URL语法在命令行方式下工作的开源文件传输工具.官网地址:https://curl.haxx.se/ 因为elasticsearch ...

  2. Elasticsearch - 简单介绍

    Elasticsearch 简介 1. 什么是 Elasticsearch ElasticSearch 是一个基于 Lucene 的搜索服务器. 它了一个分布式多 用户能力的全文搜索引擎,能够达到实时 ...

  3. P66 整环的零元

    R/I=0的零因子是0+I吗? 如果不是,那请问R/I的零因子是什么呢? R/I没有零因子 R/I的零元 是I中的元素定义的等价类 么  a是理想I的元素,自然也是R的元素

  4. ElastichSearch漏洞

    Ubuntu服务器被黑经历(ElastichSearch漏洞) 起因 最近我们的一台Ubuntu阿里云服务器一直提示有肉鸡行为,提示了好几天,开始并没有关注,然后连续几天后发现应该是个大问题啊.很可能 ...

  5. BOM、DOM

    window对象 所有浏览器都支持window对象,他表示浏览器窗口. 全局变量是window对象的属性.全局函数是window对象的方法. window的常用方法: window.innerHeig ...

  6. Python_内置函数之max

    源码: def max(*args, key=None): # known special case of max """ max(iterable, *[, defau ...

  7. API接口TOKEN设计

    首先需要知道API是什么?   API(Application Programming Interface)即应用程序接口.你可以认为 API 是一个软件组件或是一个 Web 服务与外界进行的交互的接 ...

  8. 【学亮IT手记】利用字节流复制图片

  9. pHP生成唯一单号

    这几天一直在写个人使用的用户中心,虽然期间遇到不少的问题,但还是一点点的都解决了,也从制作期间学到不少的知识,今天就说一说利用PHP生成订单单的方法. 订单号,大家都不陌生,无论从在网上购物,还是在线 ...

  10. idea中 maven打包时时报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml,

    第一种错误 :idea中 maven打包时时报错User setting file does not exist C:\Users\lenevo\.m2\setting.xml, 解决方案如下:将ma ...