牛客多校第三次B——线段树维护线性基交
写线性基交函数时调试了半天。。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
int n,m;
struct LB{
ll b[];
int check(ll x){
for(int i=;i>=;i--)if(x>>i & ){
if(!b[i])return ;
x^=b[i];
}
return ;
}
void insert(ll x){
for(int i=;i>=;i--)if(x>>i & ){
if(!b[i]){
b[i]=x;return;
}
x^=b[i];
}
}
}base[maxn];
void merge(LB A,LB B,LB & W){
LB ALL,D;//W是AB的交,D[i]表示凑出bi用了哪些A的基,即每个bi对应的T
for(int i=;i<=;i++)ALL.b[i]=D.b[i]=A.b[i];
for(int i=;i<=;i++)if(B.b[i]){
ll bi=B.b[i],T=,flag=;
for(int j=;j>=;j--)if(bi>>j & ){
if(!ALL.b[j]){
ALL.b[j]=bi;D.b[j]=T;
flag=;break;
}
bi^=ALL.b[j];T^=D.b[j];
}
if(!flag)
W.insert(T);
}
} #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
LB seg[maxn<<];
void build(int l,int r,int rt){
if(l==r){seg[rt]=base[l];return;}
int m=l+r>>;
build(lson);build(rson);
merge(seg[rt<<],seg[rt<<|],seg[rt]);
}
int query(int L,int R,ll x,int l,int r,int rt){
if(L<=l && R>=r)return seg[rt].check(x);
int m=l+r>>,res=;
if(L<=m)res&=query(L,R,x,lson);
if(R>m)res&=query(L,R,x,rson);
return res;
} int main(){
scanf("%d%d",&n,&m); for(int i=;i<=n;i++){
int k;scanf("%d",&k);
while(k--){
ll x;scanf("%lld",&x);
if(!base[i].check(x))
base[i].insert(x);
}
}
build(,n,); int l,r;ll x;
while(m--){
scanf("%d%d%lld",&l,&r,&x);
if(query(l,r,x,,n,))puts("YES");
else puts("NO");
}
}
牛客多校第三次B——线段树维护线性基交的更多相关文章
- MAZE(2019年牛客多校第二场E题+线段树+矩阵乘法)
题目链接 传送门 题意 在一张\(n\times m\)的矩阵里面,你每次可以往左右和下三个方向移动(不能回到上一次所在的格子),\(1\)表示这个位置是墙,\(0\)为空地. 现在有\(q\)次操作 ...
- 2018牛客多校6 - I Team Rocket KD树维护空间
题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...
- 牛客多校第三场 F Planting Trees
牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...
- 牛客多校第三场 G Removing Stones(分治+线段树)
牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...
- 牛客多校第3场 J 思维+树状数组+二分
牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...
- 牛客多校第三场 A—pacm team (4维背包加路径压缩)
链接:https://www.nowcoder.com/acm/contest/141/A 来源:牛客网 Eddy was a contestant participating , Eddy fail ...
- 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?
牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...
- 牛客多校第三场-A-PACM Team-多维背包的01变种
题目我就不贴了...说不定被查到要GG... 题意就是我们需要在P,A,C,M四个属性的限制下,找到符合条件的最优解... 这样我们就需要按照0/1背包的思路,建立一个五维度数组dp[i][j][k] ...
- 牛客多校第三场 A- PACM Team 背包/记忆路径
https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...
随机推荐
- Java工程师面试linux操作选择面试题大全
1.请写出常用的linux指令不低于10个,请写出linux tomcat启动.linux指令arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)shutdown -h n ...
- eclipse配置spring4.0环境详细教程
最近几天学习spring框架,在环境搭建过程中遇到了不少问题,网上找了不少资料都不是特别好,所以自己重新记录一下. 准备: 1.Eclipse下载,进官网,这里直接给链接了https://www.ec ...
- 【leetcode】939. Minimum Area Rectangle
题目如下: Given a set of points in the xy-plane, determine the minimum area of a rectangle formed from t ...
- Delphi实现获取句柄并发送消息的方法(FindWindow、FindWindowEx、EnumChildWindows、SendMessage)
Delphi实现获取句柄并发送消息的方法 本文以实例形式详细说明了Delphi获取句柄并发送消息的方法,具体用法说明如下: 查找另外一个窗口的句柄: handle := FindWindow(nil, ...
- Delphi CoCreateGuid()函数 获取GUID
Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier) GUID/UUID是通过特定算法产生的一个二进制 ...
- Dart编程实例 - 类型测试操作符 is!
Dart编程实例 - 类型测试操作符 is! void main() { double n = 2.20; var num = n is! int; print(num); } 本文转自:http:/ ...
- 屏幕尺寸,分辨率,PPI,像素之间的关系
什么是屏幕尺寸? 华为荣耀7的尺寸是5.2英寸.这个5.2英寸是手机屏幕对角线的长度. 1英寸(inch)=2.54厘米(cm) 什么是分辨率? 华为荣耀7的分辨率是1920PX*1080PX.像素是 ...
- HDU2586---How far away ?(lca算法)
Problem Description There are n houses in the village and some bidirectional roads connecting them. ...
- Openstack组件部署 — Nova_安装和配置Controller Node
目录 目录 前文列表 Prerequisites 先决条件 To create the databases To create the service credentials Create the C ...
- C++——变量
1.变量的初始化和赋值 初始化:创建变量时赋予一个初始值 赋值:把变量的当前值擦除,以新的值替代 2.变量的声明和定义 声明:名字为程序所知.如果一个程序要使用另一个程序的名字,则要包含对那个名字的声 ...