CodeForces 1100F Ivan and Burgers
Posted wawcac-blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 1100F Ivan and Burgers相关的知识,希望对你有一定的参考价值。
Time limit 3000 ms
Memory limit 262144 kB
Source Codeforces Round #532 (Div. 2)
Tags data structures divide and conquer greedy math *2600
Editorial
中文题意
英文题面还是没读太懂……其他博客是这么说的——一个长度为\\(n\\)的序列,\\(m\\)个询问,每次询问一个区间内数字的异或最大值。
解题思路
我用的下面第一个思路,还没仔细想证明啊……为什么可以直接把线性基里靠前的那些替换掉而不改变线性基的性质呢……
- https://www.cnblogs.com/zsben991126/p/11271100.html 最普遍的在线维护线性基的思路
- https://www.luogu.org/problemnew/solution/CF1100F 八仙过海
- 上面那个最常见在线思路的
- 线段树离线维护的
- 序列看成树进行点分治的
- 整体二分的
- lxl ST表的(分块那么万能的吗)
- ………………
又有了4道题可以补了
- [x] CodeForces 1100F Ivan and Burgers 单纯询问区间异或最大值
- [ ] HDU 6579 Operation 多了个末尾插入数据的操作,还有强制在线
- [ ] BZOJ 4184 shallot 这题还多了插入和删除的操作。居然是权限题……本地测一下算了。
- [ ] UVALive 8514 XOR 2017ICPC西安的一道题,操作都差不多
源代码
#include<cstdio>
#include<cstring>
#include<algorithm>
const int MAXN=1e6+5;
const int wide=31;
int T;
int n,m;
int p[MAXN][wide+2],pos[MAXN][wide+2];
void insert(int loc,int val)//location和value
for(int i=wide;~i;i--)
p[loc][i]=p[loc-1][i];
pos[loc][i]=pos[loc-1][i];
int temp=loc;
for(int i=wide;~i;i--)
if((val>>i)&1)
if(!p[loc][i])
p[loc][i]=val;
pos[loc][i]=temp;
return;
if(pos[loc][i]<temp)//????????????????????????这里目前还没有想通
std::swap(pos[loc][i],temp);//????????????????????????
std::swap(p[loc][i],val);
val^=p[loc][i];
int main()
scanf("%d",&n);
for(int i=1,v;i<=n;i++)
scanf("%d",&v);
insert(i,v);
scanf("%d",&m);
int lastans=0;
while(m--)
int l,r;
scanf("%d%d",&l,&r);
int ans=0;
for(int i=wide;~i;i--)
if((ans^p[r][i])>ans&&pos[r][i]>=l)
ans^=p[r][i];
printf("%d\\n",ans);
return 0;
以上是关于CodeForces 1100F Ivan and Burgers的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces1100F. Ivan and Burgers(离线+线性基)
Codeforces Round #594 (Div. 2) C. Ivan the Fool and the Probability Theory
Codeforces 1248 div2 C. Ivan the Fool and the Probability Theory (思维)