牛客多校第三次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条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...
随机推荐
- nc临时开启端口并监听
port="6379 3306 27017 4505 4506 24007 24008 49152" #while true #do for i in $port do isexi ...
- Vue学习笔记【9】——Vue指令之v-for和key属性
迭代数组(普通数组.对象数组) <ul> <li v-for="(item, i) in list">索引:{{i}} --- 姓名:{{item.name ...
- Java——类之间的关系
3.7 类之间的关系 3.7.1 泛化关系 类和类之间的继承关系及接口与接口之间的继承关系. 3.7.2 实现关系 类对接口的实现. 3.7.3 关联关系 类与类之间的连接,一个类可以知道另一个类的属 ...
- 【LeetCode 24】两两交换链表中的节点
题目链接 [题解] 简单的链表操作 [代码] /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...
- STL————bitset
C++的 bitset 在 bitset 头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间. bitset<> bitset1; //无参构造,长度为 ...
- delphi 多线程3
多线程程序设计 我们知道,win95或winNT都是“多线程”的操作系统,在DELPHI .中,我们可以充分利用这一特性,编写出“多线程”的应用程序. 对以往在DOS或16位windows下写程序的 ...
- BZOJ 3430: [Usaco2014 Jan]Ski Course Rating(并查集+贪心)
题面 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 136 Solved: 90 [Submit][Status][Discuss] Descript ...
- centos coreseek
下载稳定版 coreseek wget http://www.coreseek.cn/uploads/csft/3.2/coreseek-3.2.14.tar.gz 解压 .tar.gz cd cor ...
- [bzoj3073] Journeys 题解(线段树优化建图)
Description Seter建造了一个很大的星球,他准备建造N个国家和无数双向道路.N个国家很快建造好了,用1..N编号,但是他发现道路实在太多了,他要一条条建简直是不可能的!于是他以如下方式建 ...
- C/S模式简单socket通信
TCP连接方式 sever.c #include <stdio.h>#include <stdlib.h>#include <sys/socket.h>#inclu ...