bzoj3261: 最大异或和
来源:互联网 发布:windows端口及端口号 编辑:程序博客网 时间:2024/05/21 19:23
题面:给定一个非负整数序列 {a},初始长度为 N。
有 M个操作,有以下两种操作类型:
1 、A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1。
2 、Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得:
就可以了。
有 M个操作,有以下两种操作类型:
1 、A x:添加操作,表示在序列末尾添加一个数 x,序列的长度 N+1。
2 、Q l r x:询问操作,你需要找到一个位置 p,满足 l<=p<=r,使得:
a[p] xor a[p+1] xor ... xor a[N] xor x 最大,输出最大是多少。
思路:因为是xor,所以用可持久化trie。设前i项的异或和为sum[i],那么询问的答案就是max(sum[n]^x^sum[i]),因为sum[n]^x是常数,所以我们只要维护sum[i]
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=60010,maxt=maxn*32;int n,a[maxn],prec[maxn],suc[maxn],ans=0;struct node{int size,c[2];};struct Trie{node t[maxt];int root[maxn],tot;void insert(int id,int val){root[id]=++tot,t[root[id]].size+=t[root[id-1]].size+1;for (int j=31,v,now=root[id],pre=root[id-1];j>=0;j--){v=(val>>j)&1,t[now].c[v]=++tot;t[t[now].c[v]].size=t[t[pre].c[v]].size+1;t[now].c[v^1]=t[pre].c[v^1];now=t[now].c[v],pre=t[pre].c[v];}}int query(int l,int r,int val){int a=root[l-1],b=root[r],ans=0;for (int j=31;j>=0;j--){int v=(val>>j)&1;if (t[t[b].c[v^1]].size-t[t[a].c[v^1]].size) ans|=(1<<j),a=t[a].c[v^1],b=t[b].c[v^1];else a=t[a].c[v],b=t[b].c[v];}return ans;}}T;int main(){scanf("%d",&n);T.insert(1,0);for (int i=1;i<=n;i++) scanf("%d",&a[i]),T.insert(i,a[i]);for (int i=1,cnt,x;i<=n;i++){for (cnt=0,x=i-1;x&&cnt!=2;) if (a[x--]>a[i]) cnt++;prec[i]=x+1;for (cnt=0,x=i+1;x!=n+1&&cnt!=2;) if (a[x++]>a[i]) cnt++;suc[i]=x-1;}for (int i=1;i<=n;i++) ans=max(ans,T.query(prec[i],suc[i],a[i]));printf("%d\n",ans);return 0;}
就可以了。
0 0
- bzoj3261: 最大异或和
- bzoj3261 最大异或和
- [BZOJ3261] 最大异或和
- bzoj3261 最大异或和
- 【bzoj3261】最大异或和
- bzoj3261: 最大异或和
- BZOJ3261 最大异或和
- 【bzoj3261】最大异或和 主席树
- 【BZOJ3261】最大异或和【可持久化Trie树】
- bzoj3261 最大异或和(可持久化字典树)
- [BZOJ3261][最大异或和][可持久化Trie]
- [可持久化Trie] BZOJ3261: 最大异或和
- BZOJ3261最大异或和(可持久化字典树)
- BZOJ3261: 最大异或和(可持续化Trie)
- bzoj3261 最大异或和(可持久化Trie)
- bzoj3261 最大异或和【可持久化trie树】
- [BZOJ3261]最大异或和(可持久化trie树)
- 【bzoj3261】【最大异或和】可持久化trie树+贪心
- UVa 11586 - Train Tracks
- JAVA类加载机制
- 乐观人生81句
- Visual C++ Tips: 重载运算符“=”时出现的error C4430编译错误
- iOS编程:学习篇(一)
- bzoj3261: 最大异或和
- 作业成本法
- DigCSDN介绍首页
- win7下树莓派安装使用win10
- SQL优化原则
- LayoutInflater的使用
- poj 3249 Test for Job (拓扑排序)
- [leetcode][javascript]Remove Linked List Elements
- 0x3f3f3f3f...编程中无穷大常量的设置技巧