BZOJ 4184 线段树+高斯消元
思路:
线段树表示的是时间 每回最多log个段
区间覆盖
一直到叶子 的线性基 xor 一下 就是答案
一开始没有思路 看了这篇题解 豁然开朗
http://www.cnblogs.com/joyouth/p/5333181.html
(还是本省的前辈呢)
//By SiriusRen
#include <set>
#include <vector>
#include <cstdio>
using namespace std;
const int N=500000;
int n,top,all,s[N],a[N];
struct Node{int id,num;Node(int x,int y){id=x,num=y;}Node(){}};
struct Add{int l,r,num;Add(int x,int y,int z){l=x,r=y,num=z;}Add(){}}add[N];
struct Ans{
int num[32];
void psh(int x){
for(int i=30;i>=0;i--)if(x&(1<<i)){
if(!num[i]){num[i]=x;break;}
else x^=num[i];
}
}
}jy;
bool operator<(Node a,Node b){return a.num<b.num;}
set<Node>Set;set<Node>::iterator it;
vector<int>vec[N*4];
void insert(int l,int r,int pos,int L,int R,int num){
if(l>=L&&r<=R){vec[pos].push_back(num);return;}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
if(mid<L)insert(mid+1,r,rson,L,R,num);
else if(mid>=R)insert(l,mid,lson,L,R,num);
else insert(l,mid,lson,L,R,num),insert(mid+1,r,rson,L,R,num);
}
void dfs(int l,int r,int pos,Ans now){
for(int i=0;i<vec[pos].size();i++)now.psh(vec[pos][i]);
if(l==r){
int temp=0;
for(int i=30;i>=0;i--)if((temp^now.num[i])>temp)temp^=now.num[i];
printf("%d\n",temp);
return;
}
int mid=(l+r)>>1,lson=pos<<1,rson=pos<<1|1;
dfs(l,mid,lson,now),dfs(mid+1,r,rson,now);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i]>0)Set.insert(Node(i,a[i]));
else it=Set.lower_bound(Node(0,-a[i])),add[++all]=Add((*it).id,i-1,-a[i]),Set.erase(it);
}
for(it=Set.begin();it!=Set.end();++it)add[++all]=Add((*it).id,n,(*it).num);
for(int i=1;i<=all;i++)insert(1,n,1,add[i].l,add[i].r,add[i].num);
dfs(1,n,1,jy);
}
BZOJ 4184 线段树+高斯消元的更多相关文章
- 【bzoj4184】shallot 线段树+高斯消元动态维护线性基
题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
- BZOJ 2466: [中山市选2009]树( 高斯消元 )
高斯消元解异或方程组...然后对自由元进行暴搜.树形dp应该也是可以的... ------------------------------------------------------------- ...
- 【BZOJ】2466: [中山市选2009]树 高斯消元解异或方程组
[题意]给定一棵树的灯,按一次x改变与x距离<=1的点的状态,求全0到全1的最少次数.n<=100. [算法]高斯消元解异或方程组 [题解]设f[i]=0/1表示是否按第i个点的按钮,根据 ...
- BZOJ 2466 中山市选2009 树 高斯消元+暴力
题目大意:树上拉灯游戏 高斯消元解异或方程组,对于全部的自由元暴力2^n枚举状态,代入计算 这做法真是一点也不优雅... #include <cstdio> #include <cs ...
- BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)
BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...
- [bzoj 2844]线性基+高斯消元
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2844 又用到线性基+高斯消元的套路题了,因为经过高斯消元以后的线性基有非常好的序关系,所以 ...
- BZOJ 3105 线性基 高斯消元
思路: 按照从大到小排个序 维护两个数组 一个是消元后的 另一个是 按照消元的位置排的 不断 维护从大到小 (呃具体见代码) //By SiriusRen #include <cstdio> ...
- BZOJ 2115: [Wc2011] Xor [高斯消元XOR 线性基 图]
啦啦啦 题意: N 个点M条边的边带权的无向图,求1到n一条XOR和最大的路径 感觉把学的东西都用上了.... 1到n的所有路径可以由一条1到n的简单路径异或上任意个简单环得到 证明: 如果环与路径有 ...
随机推荐
- 第五课: - Stack / Unstack / Transpose函数
第 5 课 我们将简要介绍 stack 和 unstack 以及 T (Transpose)函数. 在用pandas进行数据重排时,经常用到stack和unstack两个函数.stack的意思是堆 ...
- hdu1811 Rank of Tetris 拓扑排序+并查集
这道题是拓扑排序和并查集的综合运用. 由于排行榜是一种从高到低的排序.所以在拓扑排序的时候,如果有一次加入的入度为零的点数大于1,就有变得不确定了(UNCERTAIN). 由于只有一棵树,当树的数量大 ...
- Mac Terminal 快捷键
在Mac系统中并没有Home.End等键,所以在使用时并不是特别的顺手,但是有几个键位组合可以使Terminal的操作更加灵活方便. 1.将光标移动到行首:ctrl + a 2.将光标移动到行尾:ct ...
- equal height
https://css-tricks.com/the-perfect-fluid-width-layout/ http://nicolasgallagher.com/multiple-backgrou ...
- 组装自己的tesla超级计算机
原文链接:blog.csdn.net/xqj198404/article/details/20016279 NVIDIA链接:http://www.nvidia.cn/object/tesla_bui ...
- 洛谷P3807 【模板】卢卡斯定理_组合数学模板
Code: #include<cstdio> using namespace std; typedef long long LL; const int maxn=1000000+2; LL ...
- 【leecode】小练习(简单8题)
def twoSum(nums, target): """ 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[ ...
- [模板] zkw线段树
zkw线段树 code1简单版本 code2差分版本(暂无) code1:(有注释) //By Menteur_Hxy #include<cstdio> #include<iostr ...
- mybatis 批量导入数据到mysql返回批量Id
1.首先mybatis版本必需是3.3.1或以上 2.mapper配置文件中 <insert id="insertOrderBatch" parameterType=&quo ...
- 编译htop
git clone https://github.com/hishamhm/htop cd htop ./autogen.sh ./configure make make install