链接

题意:给你每个数字出现的时间和消失的时间,求每个时刻最大异或和

题解

按照时间建立线段树,线段树每个节点开个vector存一下这个时间区间有哪些数,然后递归进入的时候加入线性基,开一个栈记录一下加了哪些基底,回溯的时候把之前加的删掉即可

#include<bits/stdc++.h>
#define REP(i,a,b) for(int i(a);i<=(b);++i)
using namespace std;
typedef long long ll;
inline int read(){char c,p=0;int w;while(!isdigit(c=getchar()))if(c=='-')p=1;w=c&15;while(isdigit(c=getchar()))w=w*10+(c&15);return p?-w:w;
}
inline char smax(int&x,const int&y){return x<y?x=y,1:0;}
inline char smin(int&x,const int&y){return x>y?x=y,1:0;}
const int N=5e5+5,n=read();
vector<int>g[N<<2];
#define ls o<<1
#define rs o<<1|1
inline void ins(int o,int l,int r,int x,int y,int z){if(x<=l&&r<=y){g[o].push_back(z);return;}int mid=l+r>>1;if(x<=mid)ins(ls,l,mid,x,y,z);if(y>mid)ins(rs,mid+1,r,x,y,z);
}
int p[33],s[33],top;
inline void ins(int x){for(int i=31;~i;--i)if(x>>i&1)if(!p[i]){p[i]=x,s[++top]=i;break;}else x^=p[i];}
inline void erase(int pre){while(top!=pre)p[s[top--]]=0;}inline void ask(int o,int l,int r){int pre=top;for(int i=0;i<g[o].size();++i)ins(g[o][i]);if(l==r){int ans=0;for(int i=31;~i;--i)smax(ans,ans^p[i]);return printf("%d\n",ans),erase(pre);}int mid=l+r>>1;ask(ls,l,mid),ask(rs,mid+1,r);erase(pre);
}
map<int,int>pos;
map<int,int>::iterator it;
int main(){REP(i,1,n){int x=read();if(x>0)pos[x]=i;else{it=pos.find(-x);ins(1,1,n,it->second,i-1,-x);pos.erase(it);}}for(it=pos.begin();it!=pos.end();++it)ins(1,1,n,it->second,n,it->first);ask(1,1,n);return 0;
}

转载于:https://www.cnblogs.com/HolyK/p/9884652.html

[BZOJ4184]shallot 线段树+线性基相关推荐

  1. 洛谷P4839 P哥的桶【线段树+线性基】

    题目描述 P哥现在有n个桶,他们排成了一排,这些桶可以装下任意多个女朋友.每个女朋友有一个固定的颜值 P哥时不时地会找新女朋友,并把新找的女朋友丢进某个桶里面.我们用1kx来表示P哥找了一个颜值为x的 ...

  2. P哥的桶(线段树+线性基)

    https://www.luogu.org/problem/P4839 题目: 有两个操作 1 a b  在a的位置添加b数值  (注意一个位置可以有多个值) 2 a b : 在 a到b的范围任取任意 ...

  3. 洛谷P4839 P哥的桶 线段树+线性基

    传送门 题意:N个操作,第K个桶放一个X,查询L到R区间的桶任意数的异或最大值. P哥时不时地会找新女朋友,并把新找的女朋友丢进某个桶里面.我们用 1 k x 来表示P哥找了一个颜值为x的女朋友,并且 ...

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

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

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

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

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

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

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

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

  8. 3237: [Ahoi2013]连通图 线段树分治

    题解: cf765f cf671e bzoj4184 bzoj4552 线段树分治裸题 还是介绍一下线段树分治 这个东西其实挺简单但也挺有用的 可以把删除+插入操作变成只有插入(倒着就是删除) 像这一 ...

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

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

最新文章

  1. AWS攻略——使用CodeBuild进行自动化构建和部署静态网页
  2. python资料库-Python对接六大主流数据库(只需三步)
  3. Lucene中string docvalues使用utf-16的优化
  4. 04-并发编程-CountDownLatch、CyclicBarrier和 Semaphore
  5. 电脑的服务器操作系统是什么,电脑的服务器操作系统是什么
  6. codeforce 837C
  7. 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误...
  8. 轻松取消Excel中的“自动添加超链接”
  9. EBT 道客巴巴的加密与破解 序章
  10. java 怎么做批量修改_JAVA实现批量修改文件名称
  11. 大妈也能看懂的大数据分布式计算图解
  12. 10步(**10 step**)天才思维模型
  13. 用Android和node.js实现扫码登录
  14. html5微信录音文件,微信H5录音实现
  15. 并行计算与计算机集群
  16. 前端开发小白,如何找一个师傅?
  17. WPF入门教程详解1——label、TextBlock、Button、Border、RadioButton、CheckBox、 数据绑定、案例、ToolTip、GroupBox、Expand、Fram
  18. 骚年都2020年了你还在用EventBus吗?jetpack之liveData
  19. Postman如何使用(四):接口测试
  20. PCL点云处理之凸包滤波(十三)

热门文章

  1. hadoop3.2启动报错:hadoop/libexec/hadoop-functions.sh: line 398: syntax error near unexpected t
  2. 亲测可用:所生成项目的处理器框架“MSIL”与处理器架构“AMD64”不匹配
  3. XXE payload
  4. Python十进制和十六进制相互转换
  5. 如何进行家居智能装饰
  6. JAVA 正则表达式 (转载)
  7. 多肽合成:二肽Cbz-Pro-Ala,14030-00-3
  8. 幼儿园去“小学化”方法途径研究开题报告
  9. 阿里云服务器变更系统
  10. jumpserver学习