bzoj4184
题解:
按时间分治线段树
然后线性基维护一下就好了
尝试了一下循环展开并没有什么效果
代码:
#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的更多相关文章
- 【BZOJ4184】shallot(线段树分治,线性基)
[BZOJ4184]shallot(线段树分治,线性基) 题面 权限题啊.....好烦.. Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把 ...
- 【BZOJ4184】shallot 线段树+vector+线性基
[BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...
- BZOJ4184: shallot
Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...
- BZOJ4184:shallot(线段树分治,线性基)
Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...
- 【BZOJ-4184 】 Shallot 线段树按时间分治 + 线性基
4184: shallot Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 356 Solved: 180[Submit][Status][Discu ...
- 【BZOJ4184】shallot 线性基
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 此题如果我们不考虑删除元素这一个操作,那么就是一道裸的线性基题. 但是此题会删除 ...
- 【bzoj4184】shallot 线段树+高斯消元动态维护线性基
题目描述 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱从自己手中的小 ...
- [BZOJ4184]shallot 线段树+线性基
链接 题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和 题解 按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下 ...
- 3237: [Ahoi2013]连通图 线段树分治
题解: cf765f cf671e bzoj4184 bzoj4552 线段树分治裸题 还是介绍一下线段树分治 这个东西其实挺简单但也挺有用的 可以把删除+插入操作变成只有插入(倒着就是删除) 像这一 ...
随机推荐
- .NET面试题系列(十二)Dictionary原理
序言 Dictionary Dictionary的开发人员都了解,和List相比,字典添加会慢,但是查找会比较快. Dictionary的本质 --- 两个数组.这是典型的用空间换取时间的做法. 先来 ...
- 20155205 2016-2017-2 《Java程序设计》第5周学习总结
20155205 2016-2017-2 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 如果没有try的话,出现异常会导致程序崩溃,而try则可以保证程序的正常运行下去.( ...
- div背景半透明
例子: html: <div class="erp-mask-a" > <div class="erp-mask-cell-a"> he ...
- redis的底层数据机构
集群架构 参考 https://blog.csdn.net/wcf373722432/article/details/78678504 https://www.cnblogs.com/George19 ...
- SpringBoot整合定时任务和异步任务处理 3节课
1.SpringBoot定时任务schedule讲解 定时任务应用场景: 简介:讲解什么是定时任务和常见定时任务区别 1.常见定时任务 Java自带的java.util.Timer类 ...
- ActiveMQ学习笔记1
1.接口 JMS 公共 点对点域 发布/订阅域 ConnectionFactory QueueConnectionFactory TopicConnectionFactory Connection Q ...
- C++ socket 传输不同类型数据的四种方式
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿): a. 结构体 b. Json序列化 c. 类对象 d. protobuf 下面逐一整理一下,方便以后进行项目开发. 1. ...
- Dubbo——基于Zookeeper服务框架搭建及案例演示
一.了解SOA微服务架构 在大规模服务化之前,应用可能只是通过RMI或Hessian等工具,简单的暴露和引用远程服务,通过配置服务的URL地址进行调用,通过F5等硬件进行负载均衡. (1) 当服务越来 ...
- 算法时间复杂度和NP问题简介
这里主要简单说一下算法的时间复杂度和NP问题简介,毕竟分析算法的时间复杂度上界有助于分析算法的好坏,分析算法好坏也有助于分析是否还有更好的算法: 一.时间复杂度: 一般关心的还有递归问题中的时间复杂度 ...
- Python3学习笔记26-unittest模块
unittest单元测试框架,主要由四部分组成:测试固件.测试用例.测试套件.测试执行器 测试固件(test fixture) 测试固件有两部分,执行测试前的准备部分setUp(),测试执行完后的清扫 ...