题解:

按时间分治线段树

然后线性基维护一下就好了

尝试了一下循环展开并没有什么效果

代码:

#include <bits/stdc++.h>
using namespace std;
const int N=5e5+;
const int mo=N*;
int n,m,ph[N*],pt[N*],f[N*],g[N*],ans2[N];
int dy[][];
vector<int> ve[N*];
#define rint register int
#define IL inline
char ss[<<],*A=ss,*B=ss;
IL char gc(){return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;}
template<class T> void read(T&x){
rint f=,c;
while (c=gc(),c<||<c)
if (c=='-') f=-;
x=c^;
while (c=gc(),<c&&c<) x=(x<<)+(x<<)+(c^);
x*=f;
}
IL void insert(int x,int y)
{
int xx=x%mo;
while (f[xx]) xx++;
f[xx]=x; g[xx]=y;
}
IL int find(int x)
{
int xx=x%mo;
while (f[xx]!=x) xx++;
return(xx);
}
#define mid ((ph[x]+pt[x])/2)
void build(int x,int h,int t)
{
ph[x]=h; pt[x]=t;
if (h==t) return;
build(x*,h,mid); build(x*+,mid+,t);
}
void insert2(int x,int h,int t,int k)
{
if (h<=ph[x]&&pt[x]<=t)
{
ve[x].push_back(k);
return;
}
if (h<=mid) insert2(x*,h,t,k);
if (mid<t) insert2(x*+,h,t,k);
}
void dfs(int x,int cnt)
{
for (rint i=;i<=;i++) dy[cnt][i]=dy[cnt-][i];
rint len=ve[x].size();
for (rint i=;i<=len/;i++)
{ if (i*>=len) break;
rint y1=ve[x][i*],y2=ve[x][i*+],
y3=ve[x][i*+],y4=ve[x][i*+];
for (rint i1=;i1>=;i1--)
if (y1&(<<i1))
if (!dy[cnt][i1])
{
dy[cnt][i1]=y1; break;
} else y1^=dy[cnt][i1]; if (i*+>=len) break;
for (rint i2=;i2>=;i2--)
if (y2&(<<i2))
if (!dy[cnt][i2])
{
dy[cnt][i2]=y2; break;
} else y2^=dy[cnt][i2]; if (i*+>=len) break;
for (rint i3=;i3>=;i3--)
if (y3&(<<i3))
if (!dy[cnt][i3])
{
dy[cnt][i3]=y3; break;
} else y3^=dy[cnt][i3]; if (i*+>=len) break;
for (rint i4=;i4>=;i4--)
if (y4&(<<i4))
if (!dy[cnt][i4])
{
dy[cnt][i4]=y4; break;
} else y4^=dy[cnt][i4];
}
if (ph[x]==pt[x])
{
rint ans=;
for (rint i=;i>=;i--)
if (dy[cnt][i]&&!(ans&(<<i))) ans^=dy[cnt][i];
ans2[ph[x]]=ans;
return;
}
dfs(x*,cnt+);
dfs(x*+,cnt+);
}
int main()
{
freopen("4184.in","r",stdin);
freopen("4184.out","w",stdout);
read(n);
build(,,n);
for (int i=;i<=n;i++)
{
int x;
read(x);
if (x<)
{
int y=find(-x);
insert2(,g[y],i-,-x);
f[y]=; g[y]=;
} else
{
insert(x,i);
}
}
for (rint i=;i<=N*-;i++)
if (f[i])
{
insert2(,g[i],n,f[i]);
}
dfs(,);
for (int i=;i<=n;i++)
printf("%d\n",ans2[i]);
return ;
}

bzoj4184的更多相关文章

  1. 【BZOJ4184】shallot(线段树分治,线性基)

    [BZOJ4184]shallot(线段树分治,线性基) 题面 权限题啊.....好烦.. Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把 ...

  2. 【BZOJ4184】shallot 线段树+vector+线性基

    [BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...

  3. BZOJ4184: shallot

    Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...

  4. BZOJ4184:shallot(线段树分治,线性基)

    Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...

  5. 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基

    4184: shallot Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 356  Solved: 180[Submit][Status][Discu ...

  6. 【BZOJ4184】shallot 线性基

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 此题如果我们不考虑删除元素这一个操作,那么就是一道裸的线性基题. 但是此题会删除 ...

  7. 【bzoj4184】shallot 线段树+高斯消元动态维护线性基

    题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...

  8. [BZOJ4184]shallot 线段树+线性基

    链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...

  9. 3237: [Ahoi2013]连通图 线段树分治

    题解: cf765f cf671e bzoj4184 bzoj4552 线段树分治裸题 还是介绍一下线段树分治 这个东西其实挺简单但也挺有用的 可以把删除+插入操作变成只有插入(倒着就是删除) 像这一 ...

随机推荐

  1. 20155334 2016-2017-2 《Java程序设计》第五周学习总结

    20155334 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 第八章:异常处理 Java中所有错误都会被打包为对象,在编程的时候会遇到因各种原因而导致的错 ...

  2. Kafka-Monitor

    kafka Monitor 监测Kafka集群状态 Topic.Consumer Group列表 图形化展示 topic 和 consumer 之间的关系 图形化展示 consumer 的 Offse ...

  3. Oracle sqlplus失去响应解决方法/如何在数据库失去响应时转储状态信息(转)

    某云平台出现故障,sqlplus连接Oracle数据库,发现没有响应.数据库版本:12.1.0.2.0 查找.借鉴前人经验,成功处理此问题,参考网址:如何在数据库失去响应时转储状态信息 - Oracl ...

  4. ARMV8 datasheet学习笔记5:异常模型

    1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4:AArch64系统级体系结构之编程模型(1)-EL/ET/ST 一文 3. 异常处理路由对比 AArch32.AArch64架 ...

  5. MyEclipse2017 CI-7的破解

    下载了一个最新版的MyEclipse,网上下载了破解工具,按照步骤完成后破解失败.很纳闷,于是网上查看,说是破解器的版本须与MyEclipse的版本对应,不对应的话,是没有效果的.如我的是CI-7版本 ...

  6. openwrt git 代码下载地址

    openwrt 各个版本代码下载 trunk:git clone git://github.com/openwrt/openwrt.git 15.05  (Chaos Calmer)git clone ...

  7. Android:自定义Dialog

    自定义Dialog:显示SeekBar 效果图: 步骤: //SettingActivity.java button4.setOnClickListener(new View.OnClickListe ...

  8. 基于Apache的阿里云部署Node.js服务器(Windows环境)

    1 前言 由于nodejs项目对方开放了多个端口,而且阿里云上的Apache服务器(windows)已经挂载了网站,此时需要把此项目也挂上去,网上查询资料,方法略少,基本是基于nginx版本的. 2  ...

  9. [学习笔记]Java作用域变量申明和C、C++的差异性

    Java作用域 大多数程序设计语言都提供了“作用域”(Scope)的概念.对于在作用域里定义的名字,作用域同时决定了它的“可见性”以及“存在时间”.在C,C++和Java 里,作用域是由花括号的位置决 ...

  10. 解决Javascript中$(window).resize()多次执行

    有些时候,我们需要在浏览器窗口发生变化的时候,动态的执行一些操作,比如做自适应页面时的适配.这个时候,我们需要在窗口拖动的时候去执行代码.但是有些时候,执行的操作比较复杂,我们只希望在窗口拖动完毕之后 ...