题解:

按时间分治线段树

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

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

代码:

#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. MySQL与宿主Linux之间交互式执行命令

    在MySQL里面执行Linux的命令并返回结果 system commands root@localhost 11:36:23> system cal March 2017 Su Mo Tu W ...

  2. android 简单文件操作

    1.布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:too ...

  3. js 判断身份证好是否合法

    function cidInfo(sId){ var info="" //if(!/^\d{17}(\d|x)$/i.test(sId))return false; sId=sId ...

  4. python之join

    def aa(): print ('hh') ' print ('gg') ' print ('ff') ' c=['ss','aa','dd'] a='kk'.join(c) print (a)#s ...

  5. saltstack系列~第四篇

    简介 针对mysql的sls编写0 软件包推送部分  tool_rsync:     file.recurse:        - source: salt://files/mysql        ...

  6. 2018-2019-2 网络对抗技术 20165320 Exp3 免杀原理与实践

    ### 2018-2019-2 网络对抗技术 20165320 Exp3 免杀原理与实践 一.实验内容 1.1 正确使用msf编码器(0.5分),msfvenom生成如jar之类的其他文件(0.5分) ...

  7. windows使用python原生组件包获取系统日志信息

    #coding=utf8 import sys import traceback import win32con import win32evtlog import win32evtlogutil i ...

  8. zabbix3.0.4添加对指定进程的监控

    zabbix3.0.4添加对进程的监控: 主要思路: 通过 ps -ef|grep sdk-push-1.0.0.jar |grep -v grep|wc -l 这个命令来判断进程sdk-push是否 ...

  9. lnmp使用socket方式连接nginx优化php-fpm性能

    lnmp使用socket方式连接nginx优化php-fpm性能 Nginx连接fastcgi的方式有2种:TCP和unix domain socket 什么是Unix domain socket?- ...

  10. 如何选取一个神经网络中的超参数hyper-parameters

    1.什么是超参数 所谓超参数,就是机器学习模型里面的框架参数.比如聚类方法里面类的个数,或者话题模型里面话题的个数等等,都称为超参数.它们跟训练过程中学习的参数(权重)是不一样的,通常是手工设定的,经 ...