4184: shallot 线段树+按时间分治+线性基
来源:互联网 发布:带上她的眼睛知乎 编辑:程序博客网 时间:2024/06/05 01:11
Oxer大爷安利的题 qwq。
了解了一下按时间分治。
由于每个数的出现区间一定是连续的一段,那么可以在线段树上对应节点插入这个数,也就是每个节点套一个vector。然后dfs一下把根到叶子路径上所有经过的点都插入线性基里,就可以求答案了。
#include<iostream>#include<cstdio>#include<set>#include<vector>using namespace std;const int N=500005;int n;int l[N<<2],r[N<<2];vector<int> a[N<<2];set<pair<int,int> > s;struct node{ int a[31]; int& operator[](int x) { return a[x]; }}ins;inline int read(){ int a=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') {a=a*10+c-'0'; c=getchar();} return a*f;}void build(int k,int x,int y){ l[k]=x; r[k]=y; if (l[k]==r[k]) return; int mid=l[k]+r[k]>>1; build(k<<1,x,mid); build(k<<1|1,mid+1,y);}void insert(int k,int x,int y,int val){ if (l[k]==x&&r[k]==y) { a[k].push_back(val); return; } int mid=l[k]+r[k]>>1; if (y<=mid) insert(k<<1,x,y,val); else if (x>mid) insert(k<<1|1,x,y,val); else insert(k<<1,x,mid,val),insert(k<<1|1,mid+1,y,val);}inline node add(node ins,int x){ for (int i=30;~i;i--) if ((1<<i)&x) { if (!ins[i]) { ins[i]=x; break; } else x^=ins[i]; } return ins;}void dfs(int k,node ins){ for (int i=0;i<a[k].size();i++) ins=add(ins,a[k][i]); if (l[k]==r[k]) { int ans=0; for (int i=30;~i;i--) if ((ans^ins[i])>ans) ans^=ins[i]; printf("%d\n",ans); return; } dfs(k<<1,ins); dfs(k<<1|1,ins);}int main(){ n=read(); build(1,1,n); for (int i=1;i<=n;i++) { int x=read(); if (x>0) s.insert(make_pair(x,i)); else { pair<int,int> last=*s.lower_bound(make_pair(-x,0)); insert(1,last.second,i-1,-x); s.erase(last); } } for (set<pair<int,int> >::iterator it=s.begin();it!=s.end();it++) insert(1,it->second,n,it->first); dfs(1,ins); return 0;}
0 0
- 4184: shallot 线段树+按时间分治+线性基
- BZOJ 4184: shallot 线段树分治 线性基
- 【bzoj4184】 shallot 线段树对时间分治+线性基
- [CDQ分治 线性基] BZOJ 4184 shallot
- bzoj 4184: shallot 分治+线性基
- [分治][线性基]BZOJ 4184: shallot
- [BZOJ4184]shallot(线段树+线性基)
- 【BZOJ 4184】shallot 线性基
- 【Bzoj4184】 shallot——时间分治+线性基
- 【bzoj4311】向量 线段树按时间分治+凸包+三分
- BZOJ 4184 shallot 分治+高斯消元
- BZOJ 4644: 经典傻逼题 线段树分治 线性基
- 4184: shallot
- [线性基 树链剖分 线段树 || ST表 || 点分治] BZOJ 4568 [Scoi2016]幸运数字
- [BZOJ 4184]shallot
- Bzoj 4184 shallot
- LA3938 线段树+分治
- 【线段树分治】[BZOJ4311]向量
- leetcode-112. Path Sum
- NLTK之朴素贝叶斯分类器
- RxJS入门(4)----深入Sequence
- 解析MATLAB中设置当前工作目录与搜索路径设置的区别
- 【AR】Kinect + Unity 体感及增强现实开发历程
- 4184: shallot 线段树+按时间分治+线性基
- 进程间通信的方式及比较
- JavaBean与Jsp
- 在已创建MFC工程中添加BCGControlBar来美化外观
- 编写一个词法分析,对于输入的一段程序,可以获取该程序的单词符号。
- JavaScript 数组内容的反转
- 《Effective C++》 笔记
- Best Coder Matrix(数学)
- 虚拟现实及增强现实(眼镜或头盔)现状与未来-基本介绍