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的简单路径异或上任意个简单环得到 证明: 如果环与路径有 ...
随机推荐
- Git Learning Part III - working remotely (Github)
help document of Github : https://help.github.com/ 1 upload 1.1 new update Initialize a repository ...
- SQL Server-数据库架构和对象、定义数据完整性
前言 本节我们继续SQL之旅,本节我们如题来讲讲一些基本知识以及需要注意的地方,若有不妥之处,还望指出,简短的内容,深入的理解,Always to review the basics. 数据库架构和对 ...
- hadoop基础学习
MR系类: ①hadoop生态 >MapReduce:分布式处理 >Hdfs:hadoop distribut file system >其他相关框架 ->unstructur ...
- HTML5中新增加Input 的种类
查询文本框 <input type="search"> 数字文本框 any 代表不设置 <input type="number" max=&q ...
- SourceInsight使用入门与技巧(转)
1 sourceinsight screen font 的默认字体是Verdana的,它是一直变宽字体.在Document style中可以将字体改为定宽的Courier 2 document o ...
- ZBrush 2018软件安装激活教程一点通
Zbrush下载地址:https://pixologic.com/CD 安装教程:(此CD代码仅有效一次,一旦此代码被使用,您将收到一封包含你账户信息的电子邮件.请把那封电子邮件保存在你的记录里.) ...
- ubuntu16.04 国内源(网易、阿里)
ubuntu16.04 网易源 deb http://mirrors.163.com/ubuntu/ xenial main restricted universe multiversedeb htt ...
- WEBGL学习【三】颜色选择
<html lang="zh-CN"> <head> <title>NeHe's WebGL</title> <meta ch ...
- CNN实现terecord、数据集、模型训练
AlexNet(Alex Krizhevsky,ILSVRC2012冠军)适合做图像分类.层自左向右.自上向下读取,关联层分为一组,高度.宽度减小,深度增加.深度增加减少网络计算量. 训练模型数据集 ...
- Centos7 下安装 Docker
一.简介 Docker是一个开源的应用容器引擎:是一个轻量级容器技术:Docker支持将软件编译成一个镜像:然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像:运行中的这个镜 ...