bzoj 4184 shallot 时间线建线段树+vector+线性基
题目大意
n个时间点
每个时间点可以插入一个权值或删除一个权值
求每个时间点结束后异或最大值
分析
异或最大值用线性基
但是线性基并不支持删除操作
我们可以对时间线建一棵线段树
离线搞出每个权值出现的区间
cover一下
先用vector存起来
最后每个时间点有的权值,就是线段树上
该叶子节点的所有祖先的权值
DFS一下动态维护一个只用插入的线性基就好了
注意
考虑如果手上有两个A权值,删除一个时怎么处理
开多一个num存数量,fir存权值最早出现位置
于是数据貌似并没有这种情况?。。。
solution
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
const int M=500007;
const int Bit=30;
inline int rd(){
int x=0;bool f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=0;
for(;isdigit(c);c=getchar()) x=x*10+c-48;
return f?x:-x;
}
int n;
int a[M],val[M],tt;
int ty[M];
int fir[M],num[M];
int ans[M];
struct Base{
int v[Bit+1];
Base(){memset(v,0,sizeof(v));}
int getmx(){
int res=0;
for(int i=Bit;i>=0;i--) if(v[i]) res^=v[i];
return res;
}
};
Base operator +(Base x,int y){
int i,ps=-1;
for(i=Bit;i>=0;i--)
if(y>>i&1){
if(x.v[i]==0 && ps==-1) ps=i;
else y^=x.v[i];
}
if(~ps){
x.v[ps]=y;
for(i=Bit;i>ps;i--)
if(x.v[i]>>ps&1) x.v[i]^=y;
}
return x;
}
struct pai{
int d,id;
pai(int dd=0,int ii=0){d=dd;id=ii;}
}pp[M];
bool cmp(pai x,pai y){
return x.d<y.d;
}
vector<int>hd[M<<2];
void ins(int x,int l,int r,int tl,int tr,int d){
if(tl<=l&&r<=tr){
hd[x].push_back(d);
return;
}
int mid=l+r>>1;
if(tl<=mid) ins(x<<1,l,mid,tl,tr,d);
if(mid<tr) ins(x<<1|1,mid+1,r,tl,tr,d);
}
void DFS(int x,int l,int r,Base nw){
int i;
for(i=1;i<=hd[x].size();i++) nw=nw+hd[x][i-1];
if(l==r){
ans[l]=nw.getmx();
return ;
}
int mid=l+r>>1;
DFS(x<<1,l,mid,nw);
DFS(x<<1|1,mid+1,r,nw);
}
int main(){
int i,x;
n=rd();
for(i=1;i<=n;i++){
x=rd();
ty[i]=x>0;
x=abs(x);
pp[i]=pai(x,i);
}
sort(pp+1,pp+n+1,cmp);
pp[0].d=pp[1].d-1;
for(i=1;i<=n;i++){
if(pp[i].d!=pp[i-1].d) val[++tt]=pp[i].d;
a[pp[i].id]=tt;
}
for(i=1;i<=n;i++){
if(ty[i]==1){
if(num[a[i]]==0) fir[a[i]]=i;
num[a[i]]++;
}
else{
if(num[a[i]]>0) ins(1,1,n, fir[a[i]],i-1, val[a[i]]);
num[a[i]]--;
}
}
for(i=1;i<=tt;i++)
if(num[i]) ins(1,1,n, fir[i],n, val[i]);
Base nw;
DFS(1,1,n,nw);
for(i=1;i<=n;i++) printf("%d\n",ans[i]);
return 0;
}
bzoj 4184 shallot 时间线建线段树+vector+线性基的更多相关文章
- bzoj 4311 向量 时间线建线段树+凸包+三分
题目大意 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y)点积的最大值是多少.如果当前是空集输出0 分析 按时间线建线段树 大致 ...
- 【BZOJ4184】shallot 线段树+vector+线性基
[BZOJ4184]shallot Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从 ...
- bzoj 4184: shallot (线段树维护线性基)
题面 \(solution:\) 这一题绝对算的上是一道经典的例题,它向我们诠释了一种新的线段树维护方式(神犇可以跳过了).像这一类需要加入又需要维护删除的问题,我们曾经是遇到过的像莫对,线段树... ...
- BZOJ.4184.shallot(线段树分治 线性基)
BZOJ 裸的线段树分治+线性基,就是跑的巨慢_(:з」∠)_ . 不知道他们都写的什么=-= //41652kb 11920ms #include <map> #include < ...
- $CF938G\ Shortest\ Path\ Queries$ 线段树分治+线性基
正解:线段树分治+线性基 解题报告: 传送门$QwQ$ 考虑如果只有操作3,就这题嘛$QwQ$ 欧克然后现在考虑加上了操作一操作二 于是就线段树分治鸭 首先线段树叶子节点是询问嘛这个不用说$QwQ$. ...
- BZOJ4184:shallot(线段树分治,线性基)
Description 小苗去市场上买了一捆小葱苗,她突然一时兴起,于是她在每颗小葱苗上写上一个数字,然后把小葱叫过来玩游戏. 每个时刻她会给小葱一颗小葱苗或者是从小葱手里拿走一颗小葱苗,并且 让小葱 ...
- LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset
题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...
- bzoj 4184 shallot——线段树分治+线性基
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4184 本来想了可持久化trie,不过空间是 nlogn (出一个节点的时候把 tot 复原就 ...
- 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横
不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...
随机推荐
- fence_vmware_soap UnicodeEncodeError
执行如下命令 fence_vmware_soap -z -l administrator@vsphere.local -p 2wsx@QAZ -a 10.0.2.200 -o list --ssl-i ...
- SC || 那些CheckStyle中的错误们
lab5里给了我们一个checkstyle查代码风格的方法.. 然后 lab4代码 copy一份! 添加checkstyle! 项目 右键 checkstyle!(自信脸) 3s后——7256 war ...
- VS code 豆沙绿护眼主题
一.下载亮色主题Atom One Light 二.找到settings.JSON,粘贴JSON 快捷键输入 Ctrl+Shift+p ,输入settings,选择open settings (J ...
- FZOJβ #31.字符串
http://1572m36l09.iask.in:30808/problem/31 首先转化为保留尽量少的段使得字典序最大.考虑逐字符确定,显然我们可以将相同的连续字符缩在一起.注意到字典序最大的字 ...
- lua调用java过程
在cocos2dx框架中,有继承好的luaj文件来方便我们去使用lua调用java底层代码,注意:luaj只能使用在安卓平台下,如果在平台下使用,会出错, 所以使用前需要加平台判断,方法 如下: lo ...
- linux centos 下ssh的连接
参考链接 虚拟机下CentOS7开启SSH连接 记录 我用finalssh连接virtualbox里的centos,发现报出java.net.UnknownHostException 一开始我以为是s ...
- 如何使用 HTML5 的picture元素处理响应式图片
来自: http://www.w3cplus.com/html5/quick-tip-how-to-use-html5-picture-for-responsive-images.html 图片在响应 ...
- CSS3边框图片-像素虚边的问题
虽然CSS3新增了这个功能,但是在W3school里面并没有给出具体详细的解释,还好网上不乏大神给你我们很全面的解释其中的原理-css3:border-image边框图像详解 边框图片的原理是四个角不 ...
- 双击内容变input框可编辑,失去焦点后修改的数据异步提交
<html> <head> <meta charset="utf8"> <script src="https://cdn.boo ...
- Python基础(二)——常用内置函数
1. 常用内置函数 (1)isinstance(object, classinfo) 用于判断一个对象是否为某一类型. object 是实例对象 classinfo 是基本类型如 int, floa ...