题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4184

此题如果我们不考虑删除元素这一个操作,那么就是一道裸的线性基题。

但是此题会删除元素,且允许离线。

我最初的想法是开一个线段树,然后通过两个线性基的合并去更新答案。

后来发现,一个元素出现的时间段其实是确定的。

我们种一棵线段树,用来维护哪些元素在哪些时间段出现过。

我们在线段树的每个节点上开一个vector,用来存储哪些元素在该节点所表示的时间段上出现过。

最后统计答案一个dfs即可。

第一次交上去我被卡常了,后来换了静态链表才过了。

 #include<bits/stdc++.h>
#define M 500005
using namespace std;
int n,m,num[M]={},q[M]={};
struct edge{int u,next;}e[M*]={}; int head[M*]={},use=;
void add(int x,int y){use++;e[use].u=y;e[use].next=head[x];head[x]=use;}
void updata(int x,int ll,int rr,int l,int r,int k){
if(l<=ll&&rr<=r){add(x,k);return;}
int mid=(ll+rr)>>;
if(l<=mid) updata(x<<,ll,mid,l,r,k);
if(mid<r) updata(x<<|,mid+,rr,l,r,k);
}
struct node{
int a[];
node(){memset(a,,sizeof(a));}
void insert(int x){
for(int i=;~i;i--)
if(x&(<<i)){
if(!a[i]) {a[i]=x; return;}
else x^=a[i];
}
}
int ans(){
int ans=;
for(int i=;~i;i--)
ans=max(ans,a[i]^ans);
return ans;
}
};
map<int,int> mp;
void dfs(int x,int l,int r,node k){
for(int i=head[x];i;i=e[i].next) k.insert(e[i].u);
if(l==r){
printf("%d\n",k.ans());
return;
}
int mid=(l+r)>>;
dfs(x<<,l,mid,k); dfs(x<<|,mid+,r,k);
}
int main(){
scanf("%d",&m);
for(int i=;i<=m;i++){
int x; scanf("%d",&x);
if(x>) mp[x]=i;
else{
int l=mp[-x];
updata(,,m,l,i-,-x);
mp.erase(-x);
}
}
map<int,int>::iterator it;
for(it=mp.begin();it!=mp.end();it++){
int l=it->second,x=it->first;
//cout<<l<<' '<<x<<endl;
updata(,,m,l,m,x);
}
node hh;
dfs(,,m,hh);
}

【BZOJ4184】shallot 线性基的更多相关文章

  1. BZOJ 4184 shallot 线性基+分治

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. BZOJ.4184.shallot(线段树分治 线性基)

    BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...

  9. bzoj 4184: shallot (线段树维护线性基)

    题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...

随机推荐

  1. Spring Boot与Logback的运用(自定义异常+AOP)

    在开发以及调试过程中,程序员对日志的需求是非常大的,出了什么问题,都要通过日志去进行排查,但是如果日志不清或者杂乱无章,则不利于维护 这边就比较详细的列举几种类型的日志,供大家参考 首先明白logba ...

  2. Android中px, ppi, dpi, dp, dip, sp概念解析

    Android中px, ppi, dpi, dp, dip, sp概念解析

  3. 2018.10.02 NOIP模拟 序列维护(线段树+广义欧拉定理)

    传送门 一道比较好的线段树. 考试时线性筛打错了于是弃疗. 60分暴力中有20分的快速幂乘爆了于是最后40分滚粗. 正解并不难想. 每次区间加打懒标记就行了. 区间查询要用到广义欧拉定理. 我们会发现 ...

  4. 2018.08.21 bzoj4668: 冷战(并查集+启发式合并)

    传送门 可以发现需要维护连通性和两点连通时间. 前者显然是并查集的常规操作,关键就在于如何维护两点的连通时间. 然后会想到这个时候不能用路径压缩了,因为它会破坏原本树形集合的结构,因此可以启发式按si ...

  5. hdu-1116(欧拉回路+并查集)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1116 思路:将字符串的头元素和尾元素视为图的x,y节点,然后合并x,y. 如果这个图不连通,则门不能打 ...

  6. Linux服务器部署系列之四—DHCP篇

    DHCP服务器的配置是Linux服务器配置中最简单的服务之一,网上也有很多相关文档,不过大部分都只是讲解了配置.虽然我这篇文档也不一定很完善,不过我还是希望能够尽量说得明白一些,同时也希望大家能够提供 ...

  7. 函数作用域和块级作用域--你不知道的JavaScript

    et和const在{}内声明都会变为外部不能访问的值,但是const声明的是常量,也不能修改 函数是 JavaScript 中最常见的作用域单元.本质上,声明在一个函数内部的变量或函数会在所处的作用域 ...

  8. 多网卡下对ServerSocket以TCP协议绑定IP和端口的测试

    一.引言:之前开发TCP协议的程序(C#里是Socket为主)都是基于主机上只有一个IP的,后来项目里涉及到了主机需要同时连接内外和外网的情况,在该主机上部署着一套WCS系统和一套WMS系统:WCS系 ...

  9. java获取变量的类型

    对于简单类型变量,是无法直接获得变量类型的://要想获取,必须自定义函数进行返回 对于包装类型变量,是可以直接获得的,变量名称.getClass().getName(); java中获取变量的类型可以 ...

  10. 从Google Earth 中下载三维模型

    https://www.cnblogs.com/chidou-yin/p/4306224.html