LOJ 6144
程序员文章站
2024-03-02 21:46:10
...
在某位and 0或者or 1之后就全部相等了,这意味着这一位没有比较的必要了
可以重构可持久化01trie
最多log次
#include<bits/stdc++.h>
#define file(KSCN) freopen(KSCN".in","r",stdin),freopen(KSCN".out","w",stdout)
using namespace std;
typedef long long ll;
namespace IO{
const int ios=1<<17;
char R[ios],*Rc=R,*RB=R;int pass;
inline char gec(){return(Rc==RB&&(RB=(Rc=R)+fread(R,1,ios,stdin),Rc==RB))?EOF:*Rc++;}
template<typename Tp>inline int read(Tp&A){
static char c,sg;c=gec();sg=0;A=0;
while(!isdigit(c)&&c!=EOF)sg|=(c=='-'),c=gec();
if(c==EOF)return EOF;
while(isdigit(c))A=(A<<3)+(A<<1)+(c^'0'),c=gec();
return A=sg?-A:A,0;
}
void getstr(char*cur){
char ch=gec();
while(isspace(ch))ch=gec();
while(!isspace(ch))*cur++=ch,ch=gec();
*cur=0;
}
inline int read(){return read(pass),pass;}
}
using IO::gec;using IO::read;using IO::getstr;
const int N=2e6+5;
unsigned vis,wow,op;
int s[N][2],alloc,sz[N];
int w[N],rt[N];
int n,m;
int Querys(int x,int y,int k){
int ret=0;
for(int i=30;~i;i--){
if(~vis>>i&1){
int v=op>>i&1,
scc=sz[s[y][v]]-sz[s[x][v]],
to=(k<=scc)?0:(k-=scc,1);
ret|=(to<<i);
x=s[x][v^to],y=s[y][v^to];
}
}
return ret|(vis&(wow));
}
void copys(int&b){
++alloc;
memcpy(s[alloc],s[b],sizeof(s[b]));
sz[alloc]=sz[b];
b=alloc;
}
void rebuild(){
memset(s,0,sizeof(s));
memset(sz,0,sizeof(sz));
alloc=0;
for(int k=1;k<=n;k++){
int val=w[k],cur=rt[k-1];
copys(cur);
rt[k]=cur;
for(int i=30;~i;i--)if(~vis>>i&1)
copys(s[cur][val>>i&1]),
sz[cur=s[cur][val>>i&1]]++;
}
}
int main(){
char opt[20];
int val,l,r,k;
read(n);read(m);
for(int i=1;i<=n;i++)read(w[i]);
rebuild();
while(m--){
getstr(opt);
if(opt[1]=='s'){
read(l);
read(r);
read(k);
printf("%d\n",Querys(rt[l-1],rt[r],k));
}
else{
read(val);
if(opt[1]=='o'){
op^=val;
wow^=val;
}else{
unsigned tmp=vis;
if(opt[1]=='n')vis|=(~val),wow&=val;
else vis|=val,wow|=val;
if(vis!=tmp)rebuild();
}
}
}
return 0;
}
上一篇: 主席树
下一篇: 群体变异数据vcf文件过滤概念及使用方法
推荐阅读
-
LOJ 6144
-
洛谷P5286/bzoj5489/loj3054 [HNOI2019]鱼 计算几何
-
loj#2312. 「HAOI2017」八纵八横(线性基 线段树分治)
-
LOJ#6034. 「雅礼集训 2017 Day2」线段游戏【李超线段树】
-
LOJ6045 「雅礼集训 2017 Day8」价
-
LOJ#10002 喷水装置(贪心)
-
LOJ#515. 「LibreOJ β Round #2」贪心只能过样例(bitset)
-
[LOJ6198] 谢特
-
loj#2483. 「CEOI2017」Building Bridges(dp cdq 凸包)
-
loj#2002. 「SDOI2017」序列计数(dp 矩阵乘法)