P哥的桶(线段树+线性基)
https://www.luogu.org/problem/P4839
题目: 有两个操作 1 a b 在a的位置添加b数值 (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意的数值相异或,结果最大。
分析:用线段树去维护这个操作合并线性基的操作;时间复杂度O(nlogmlogx)
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
struct LB{
int a[];
void add(int x){
for(int i= ; i>= ; i--)
{
if(x&(<<i)){
if(!a[i]){
a[i]=x;
return ;
}
x^=a[i];
}
}
}
void add(LB &n){
for(int i= ; i>= ; i--)
if(n.a[i]) add(n.a[i]);
}
}p[maxn],ans;
void update(int rt , int l , int r , int k , int x){
p[rt].add(x);
if(l==r) return;
int mid=(l+r)>>;
if(k<=mid)
update(rt<<,l,mid,k,x);
else
update(rt<<|,mid+,r,k,x);
}
void query(int rt , int l , int r , int ql , int qr){
if(ql<=l&&qr>=r){
ans.add(p[rt]);
return ;
}
int mid=(l+r)>>;
if(qr<=mid) query(rt<<,l,mid,ql,qr);
else if(mid<ql) query(rt<<|,mid+,r,ql,qr);
else query(rt<<,l,mid,ql,mid),query(rt<<|,mid+,r,ql,qr);
}
int main(){
int n,m;scanf("%d%d",&m,&n);
for(int i= ; i<=m ; i++){
int op,a,b;
scanf("%d%d%d",&op,&a,&b);
if(op==) update(,,n,a,b);///在a位置插b
else {
memset(ans.a,,sizeof(ans.a));
query(,,n,a,b);
int Max=;
for(int i= ; i>= ; i--)
if((Max^(ans.a[i]))>Max)
Max^=ans.a[i];
printf("%d\n",Max);
}
}
return ;
}
P哥的桶(线段树+线性基)的更多相关文章
- bzoj 4568: [Scoi2016]幸运数字【树链剖分+线段树+线性基】
一眼做法,好处是好想好写坏处是常数大,容易被卡(bzoj loj 洛谷开O2 能AC,不开有90分-- 大概就是树剖之后维护线段树,在线段树的每个节点上上维护一个线性基,暴力\( 60^2 \)的合并 ...
- [BZOJ4184]shallot 线段树+线性基
链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...
- 2019牛客多校第四场B xor——线段树&&线性基的交
题意 给你 $n$ 个集合,每个集合中包含一些整数.我们说一个集合表示一个整数当且仅当存在一个子集其异或和等于这个整数.现在你需要回答 $m$ 次询问 ($l, r, x$),是否 $l$ 到 $r$ ...
- Comet OJ - Contest #3 D 可爱的菜菜子 线段树+线性基
题意 给你一个长度为 \(n\) 的整数序列 \(a_1, a_2, \ldots, a_n\),你需要实现以下两种操作,每个操作都可以用四个整数 \(opt\ l\ r\ v\) 来表示: \(op ...
- CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...
- 【2017西安邀请赛:A】XOR(线段树+线性基)
前言:虽然已经有很多题解了,但是还是想按自己的理解写一篇. 思路:首先分析题目 一.区间操作 —— 线段树 二.异或操作 —— 线性基 这个两个不难想,关键是下一步的技巧 “或”运算 就是两个数的二进 ...
- Comet OJ - Contest #3 D可爱的菜菜子(线段树+线性基的合并)
这题其实挺经典的,看到求异或最大,显然想到的是线性基,不过这怎么维护?当然区间有关的东西都可以上线段树,区间修改时记录每个点的修改量k,然后合并线性基时再加入线性基.因为线性基是求一组极大线性无关组, ...
- 2019年牛客多校第四场 B题xor(线段树+线性基交)
题目链接 传送门 题意 给你\(n\)个基底,求\([l,r]\)内的每个基底是否都能异或出\(x\). 思路 线性基交板子题,但是一直没看懂咋求,先偷一份咖啡鸡板子写篇博客吧~ 线性基交学习博客:传 ...
- Codeforces Round #291 (Div. 2) D. R2D2 and Droid Army [线段树+线性扫一遍]
传送门 D. R2D2 and Droid Army time limit per test 2 seconds memory limit per test 256 megabytes input s ...
随机推荐
- Appium-入门实例1
参考:(https://blog.csdn.net/zh175578809/article/details/76862590) 第一步:启动虚拟设备 在运行App之前,首先需要创建一个Android模 ...
- 编码规范(code style guide)
1. Javascript Google: https://google.github.io/styleguide/jsguide.html Airbnb:https://github.com/air ...
- 分支结构 :if - else
分支结构 :if - else 格式一: if(条件表达式){ 执行语句; } 格式二:二选一 if(条件表达式){ 执行语句1; }else{ 执行语句2; } 格式三: 多选一 if(条件表达式1 ...
- 小白学Python(10)——pyecharts 绘制仪表图 Gauge
from pyecharts import options as opts from pyecharts.charts import Gauge, Page gauge=( Gauge() .add( ...
- BlockingQueue 阻塞队列(生产/消费者队列)
1:BlockingQueue的继承关系 java.util.concurrent 包里的 BlockingQueue是一个接口, 继承Queue接口,Queue接口继承 Collection Blo ...
- python学习第四十八天json模块与pickle模块差异
在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点 跨语言,体积小 缺点 只能支持 int st ...
- python 学习第四十七天shelve模块
shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式. 1,序列化 import shelve f=shelve.open('she ...
- 音频视频的播放的进度调整(以.net为例)
Background:对于音视频在线播放,一些小应用是靠nginx处理访问视频.音频文件的请求,对外应用的一般会托管至各种云上使用相关的服务.前者存在巨大的安全隐患,后者会有一定的成本.有的时候还是需 ...
- VS2019配置MKL教程(Windows)
下载链接:https://software.intel.com/en-us/mkl 1.文件下载 官网注册后,选择MKL下载下来,安装到指定目录就行,不在多说. 2.配置文件 首先创建一个Window ...
- 你的package包名有问题!
今天在Eclipse中运行我的Java程序中,就弹出了以下消息的窗口: 注意窗口的名字为Java Virtual Machine Launcher . Error : A JNI error has ...