写线性基交函数时调试了半天。。

#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——线段树维护线性基交的更多相关文章

  1. MAZE(2019年牛客多校第二场E题+线段树+矩阵乘法)

    题目链接 传送门 题意 在一张\(n\times m\)的矩阵里面,你每次可以往左右和下三个方向移动(不能回到上一次所在的格子),\(1\)表示这个位置是墙,\(0\)为空地. 现在有\(q\)次操作 ...

  2. 2018牛客多校6 - I Team Rocket KD树维护空间

    题意:给出n条铁路区间\([L,R]\),共有m个boom依时间顺序放置在\(k_i\)中,区间与\(k_i\)有交集的都被炸掉 求每次炸掉的铁路个数和最后输出所有id被炸的时间点 炸弹能炸到的区间满 ...

  3. 牛客多校第三场 F Planting Trees

    牛客多校第三场 F Planting Trees 题意: 求矩阵内最大值减最小值大于k的最大子矩阵的面积 题解: 矩阵压缩的技巧 因为对于我们有用的信息只有这个矩阵内的最大值和最小值 所以我们可以将一 ...

  4. 牛客多校第三场 G Removing Stones(分治+线段树)

    牛客多校第三场 G Removing Stones(分治+线段树) 题意: 给你n个数,问你有多少个长度不小于2的连续子序列,使得其中最大元素不大于所有元素和的一半 题解: 分治+线段树 线段树维护最 ...

  5. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  6. 牛客多校第三场 A—pacm team (4维背包加路径压缩)

    链接:https://www.nowcoder.com/acm/contest/141/A 来源:牛客网 Eddy was a contestant participating , Eddy fail ...

  7. 牛客网 牛客小白月赛5 I.区间 (interval)-线段树 or 差分数组?

    牛客小白月赛5 I.区间 (interval) 休闲的时候写的,但是写的心情有点挫,都是完全版线段树,我的一个队友直接就水过去了,为啥我的就超内存呢??? 试了一晚上,找出来了,多初始化了add标记数 ...

  8. 牛客多校第三场-A-PACM Team-多维背包的01变种

    题目我就不贴了...说不定被查到要GG... 题意就是我们需要在P,A,C,M四个属性的限制下,找到符合条件的最优解... 这样我们就需要按照0/1背包的思路,建立一个五维度数组dp[i][j][k] ...

  9. 牛客多校第三场 A- PACM Team 背包/记忆路径

    https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...

随机推荐

  1. 微信小程序 滚动到底部

    1.html <view id="bottom"></view> 2. onReady: function () { //滚动到底部 let query = ...

  2. hdu 3450 后缀数组

    题目大意: 求多个字符串的最长公共子串 基本思路: 参加我的博客hdu2774 代码如下: #include<cstdio> #include<cstring> using n ...

  3. Angular.js分页代码

                $scope.reloadList=function(){                             $scope.findPage( $scope.pagina ...

  4. RAM SSO功能重磅发布 —— 满足客户使用企业本地账号登录阿里云

    阿里云RAM (Resource Access Management)为客户提供身份与访问控制管理服务.使用RAM,可以轻松创建并管理您的用户(比如雇员.企业开发的应用程序),并控制用户对云资源的访问 ...

  5. php常用函数总结2

    文件系统函数 函数名 描述 实例 输入 输出 操作 fopen() 打开文件或者 URL $handle = fopen("ftp://user:password@example.com/s ...

  6. 「CTS2019 | CTSC2019」氪金手游 解题报告

    「CTS2019 | CTSC2019」氪金手游 降 智 好 题 ... 考场上签到失败了,没想容斥就只打了20分暴力... 考虑一个事情,你抽中一个度为0的点,相当于把这个点删掉了(当然你也只能抽中 ...

  7. APICloud框架--sublime使用自定义loader

    官方的apploader调试器,只是有官方的一些模块,如果我们使用非官方的模块就要使用自定义loader进行调试.接下来就走一边sublime设置自定义loader的步骤 修改config.xml 打 ...

  8. Golang(Go语言)内置函数之copy用法

    该函数主要是切片(slice)的拷贝,不支持数组 将第二个slice里的元素拷贝到第一个slice里,拷贝的长度为两个slice中长度较小的长度值 示例: s := []int{1,2,3} fmt. ...

  9. Jeecg 切换默认首页方法

    类名: org.jeecgframework.core.enums.SysThemesEnum

  10. TLS/SSL 协议 - ServerKeyExchange、ServerHelloDone

    ServerKeyExchange ServerKeyExchange消息的目的是携带密钥交换的额外数据.消息内容对于不同的协商算法套件都会存在差异.在某些场景中,服务器不需要发送任何内容,这意味着在 ...