Description

在某时刻加入或删除一个点,问每个时刻的集合中能异或出来的最大值是多少.

Sol

线段树+按时间分治+线性基.

按时间分治可以用 \(logn\) 的时间来换取不进行删除的操作.

把一个数字的存在时间挂在线段树的区间上,不超过 \(logn\) 个区间,所以总和不超过 \(nlogn\) 个节点信息.

然后从上往下走遍历整个线段树,每次到根节点统计一下答案,这里跟线性基有些不同,线性基转置矩阵就是普通的高斯消元,这时候维护线性基,每次插入一个数,更新的贡献,统计答案的时候从上往下贪心,选一个最大值,而不是回带...

Code

/**************************************************************Problem: 4184User: BeiYuLanguage: C++Result: AcceptedTime:11256 msMemory:37624 kb
****************************************************************/#include <bits/stdc++.h>
using namespace std;typedef long long LL;
const int N = 5e5+50;
const int M = 35;int n;
map< int,int > mp;
LL pow2[M],ans[N];struct Py {LL b[M];Py() { memset(b,0,sizeof(b)); }void insert(int x) {for(int i=M-1;~i;i--) if(x&pow2[i]) {if(!b[i]) { b[i]=x;break; }else x^=b[i];}}LL GetAns() {LL ans=0;for(int i=M-1;~i;i--) if((ans^b[i])>ans) ans^=b[i];return ans;}
}piyan;
struct SegMentTree {vector< int > d[N<<2];#define lc (o<<1)#define rc (o<<1|1)#define mid ((l+r)>>1)void insert(int o,int l,int r,int L,int R,int x) {if(L<=l && r<=R) return void(d[o].push_back(x));if(L<=mid) insert(lc,l,mid,L,R,x);if(R>mid) insert(rc,mid+1,r,L,R,x);}void DFS(int o,int l,int r,Py py) {for(vector< int > ::iterator i=d[o].begin();i!=d[o].end();i++) py.insert(*i);if(l==r) return void(ans[l]=py.GetAns());DFS(lc,l,mid,py),DFS(rc,mid+1,r,py);}
}seg;inline int in(int x=0,char ch=getchar(),int v=1) {while(ch>'9' || ch<'0') v=ch=='-' ? -1 : v,ch=getchar();while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();return x*v;
}
int main() {n=in();for(int i=1;i<=n;i++) {int x=in();if(x>=0) mp[x]=i;else x=-x,seg.insert(1,1,n,mp[x],i-1,x),mp.erase(x);}for(map< int,int > ::iterator i=mp.begin();i!=mp.end();i++) if((*i).second) seg.insert(1,1,n,(*i).second,n,(*i).first);pow2[0]=1;for(int i=1;i<M;i++) pow2[i]=pow2[i-1]<<1;seg.DFS(1,1,n,piyan);for(int i=1;i<=n;i++) printf("%lld\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/beiyuoi/p/6216163.html

BZOJ 4184: shallot相关推荐

  1. BZOJ 4184 shallot

    目录 解题思路 裸的想法 优化一下线性基的储存 另外两种优化思路 源代码 假的题面 可用的题面 离线BZOJ好啊 Time limit 30000ms Memory limit 131072 kB O ...

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

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

  3. bzoj 4184 shallot 时间线建线段树+vector+线性基

    题目大意 n个时间点 每个时间点可以插入一个权值或删除一个权值 求每个时间点结束后异或最大值 分析 异或最大值用线性基 但是线性基并不支持删除操作 我们可以对时间线建一棵线段树 离线搞出每个权值出现的 ...

  4. BZOJ 4184 shallot 线性基+分治

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

  5. BZOJ 4184: shallot 线性基+线段树分治

    复习一下线性基 ~ code: #include <cmath> #include <vector> #include <cstdio> #include < ...

  6. 4184: shallot

    4184: shallot Time Limit: 30 Sec   Memory Limit: 128 MB Submit: 263   Solved: 129 [ Submit][ Status] ...

  7. 【BZOJ 4184】shallot 线性基

    一开始一直没有想到因为只是在一直思考线性上怎么做,结果这道题很巧妙的运用的是在线段树上,因为每一个数字的影响其实只是在一段区间上的,这个=很显然,然后就类似于线段树上区间修改打懒惰标记,最后全部dfs ...

  8. LOJ 2312(洛谷 3733) 「HAOI2017」八纵八横——线段树分治+线性基+bitset

    题目:https://loj.ac/problem/2312 https://www.luogu.org/problemnew/show/P3733 原本以为要线段树分治+LCT,查了查发现环上的值直 ...

  9. []BZOJ4184: shallot

    题解:  考虑离线 对于每个数都有一个存在时间段 我们以时间段建线段树 因为线性基不允许删除元素 然后我们只需要把对应时间段的元素加入 这样就能避免删除问题 然后就是普通操作了(第一次写链表版本的线性 ...

最新文章

  1. 疯狂python讲义
  2. java fork join原理_Java并发Fork-Join框架原理解析
  3. 第2课 贝贝的图形(vhist)-2019-07-11《聪明人的游戏-提高篇》
  4. js的正则表达,只允许数字和特殊
  5. 中国开发者真实画像:Java长盛,偏爱Windows操作系统,鲜少参与开源项目
  6. 一家公司的几道笔试题
  7. Car-like robot运动参数校准(图片版)
  8. 爬虫—使用Requests
  9. Python Apex 武器自动识别与压枪 全过程记录
  10. 本地电脑没有虚拟机网卡vm8
  11. easypanel默认php版本设置,easypanel面板+kangle
  12. Ubuntu 修改分辨率
  13. 拼多多参谋在什么地方?多多参谋的作用是什么?
  14. 2021年最全圣诞节攻略,外贸人看这一篇就够了
  15. Spring @Retryable 和 @Recover
  16. tf 设置多显卡_让显卡再次危机,《孤岛危机》重置版能否找回当年的感动
  17. 一碗阳春面(一碗清汤荞麦面)
  18. 0507 #2 NYIST 括号配对问题
  19. php 电梯广告系统设计,电梯广告-市场营销- 人大经济论坛-经管百科
  20. 甲骨文公司(Oracle)

热门文章

  1. 再见,可恶的桔梗导航!一文搞定chrome浏览器默认打开页面被流氓软件绑定
  2. Javascript 检测网速
  3. 连点器一秒10000下?连点器的用途
  4. 计算机系统结构填空题
  5. 简单实现接口自动化测试(基于python)
  6. 微软iscsi服务器,HOWTO: 基于 Windows Server iSCSI 服务创建 RAM Disk
  7. 分享巧记Linux命令的方法
  8. js 点击按钮的防抖
  9. h5游戏:适应不同尺寸屏幕的WEB2048
  10. java中级面试题 含答案