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

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

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

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

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

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

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

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

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

 1 #include<bits/stdc++.h>
 2 #define M 500005
 3 using namespace std;
 4 int n,m,num[M]={0},q[M]={0};
 5 struct edge{int u,next;}e[M*20]={0}; int head[M*4]={0},use=0;
 6 void add(int x,int y){use++;e[use].u=y;e[use].next=head[x];head[x]=use;}
 7 void updata(int x,int ll,int rr,int l,int r,int k){
 8     if(l<=ll&&rr<=r){add(x,k);return;}
 9     int mid=(ll+rr)>>1;
10     if(l<=mid) updata(x<<1,ll,mid,l,r,k);
11     if(mid<r) updata(x<<1|1,mid+1,rr,l,r,k);
12 }
13 struct node{
14     int a[31];
15     node(){memset(a,0,sizeof(a));}
16     void insert(int x){
17         for(int i=30;~i;i--)
18         if(x&(1<<i)){
19             if(!a[i]) {a[i]=x; return;}
20             else x^=a[i];
21         }
22     }
23     int ans(){
24         int ans=0;
25         for(int i=30;~i;i--)
26         ans=max(ans,a[i]^ans);
27         return ans;
28     }
29 };
30 map<int,int> mp;
31 void dfs(int x,int l,int r,node k){
32     for(int i=head[x];i;i=e[i].next) k.insert(e[i].u);
33     if(l==r){
34         printf("%d\n",k.ans());
35         return;
36     }
37     int mid=(l+r)>>1;
38     dfs(x<<1,l,mid,k); dfs(x<<1|1,mid+1,r,k);
39 }
40 int main(){
41     scanf("%d",&m);
42     for(int i=1;i<=m;i++){
43         int x; scanf("%d",&x);
44         if(x>0) mp[x]=i;
45         else{
46             int l=mp[-x];
47             updata(1,1,m,l,i-1,-x);
48             mp.erase(-x);
49         }
50     }
51     map<int,int>::iterator it;
52     for(it=mp.begin();it!=mp.end();it++){
53         int l=it->second,x=it->first;
54         //cout<<l<<' '<<x<<endl;
55         updata(1,1,m,l,m,x);
56     }
57     node hh;
58     dfs(1,1,m,hh);
59 }

转载于:https://www.cnblogs.com/xiefengze1/p/8783670.html

【BZOJ4184】shallot 线性基相关推荐

  1. BZOJ 4184 shallot 线性基+分治

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

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

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

  3. 【BZOJ 4184】shallot 线性基

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

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

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

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

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

  6. 【BZOJ4184】Shallot(线性基,线段树分治)

    Description 可支持插入.删除.求最大异或值的线性基. Solution 插入.求最大异或值都比较基础. 其实删除也是套路吧,,直接建一棵时间线段树即可. Code /*********** ...

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

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

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

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

  9. NKOJ 3652 shallot (线性基+CDQ分治)

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

最新文章

  1. PHP artisan
  2. Decision Tree
  3. http几个版本的区别
  4. Diccuz!NT的dll版本号控制技巧
  5. Markdown入门指南-指间阁
  6. 5G 是安全漏洞的“救世主”吗?
  7. android系统app打开蓝牙+设置可见性
  8. ajax如何传两个不同的参数,ajax 如何从后台传多个data对象(多个参数)string类型的...
  9. Linux发行版Ubuntu教程
  10. 如何在阿里云上创建安全的远程工作空间
  11. 2020年5月程序员工资统计,平均14542元
  12. vscode安装哪个版本更好
  13. FA固定资产录入时的细节:是否输入累计折旧
  14. 稳压二极管与TVS二极管的区别
  15. 为什么阿里巴巴最爱招Java开发程序员?
  16. 前端校招字节跳动面试 第三篇
  17. 前端学习:浏览器缓存方式有哪些(cookie、localstorage、sessionstorage)
  18. 自动气象站-小型气象仪-产品说明
  19. matlab射影几何,一种利用单幅图像的现场摄像机自标定方法
  20. 浅谈Linux PCI设备驱动(一)

热门文章

  1. Linux查看opencv 版本
  2. 【开源我写的富文本】打造全网最劲富文本系列之大话技术难点与特色设计。...
  3. ch02第一个微信小程序作业
  4. NetBIOS名字解析过程
  5. 绝对路径和相对路径的区别
  6. 脑洞清奇AI君,给小猫咪们起了8000多个无厘头名字丨Colab Demo可用
  7. 中国虾青素市场趋势报告、技术动态创新及市场预测
  8. 紫色风格生日快乐视频祝福PR模板MOGRT
  9. 机器学习之神经网络(从神经网络结构到pytorch基本用法)
  10. python通关-集合操作方法详解