NEUOJ711 异星工厂 字典树+贪心
题意:你可以收集两个不相交区间的权值,区间权值是区间异或,问这两个权值和最大是多少
分析:很多有关异或求最大的题都是利用01字典树进行贪心,做这个题的时候我都忘了。。。最后是看别人代码的时候才想起来这个套路
l[i],记录,从 1 到 i 里 最大的异或区间权值,
r[i], 记录,从 i 到 n 里 最大的异或区间权值
这样两轮插入,然后查询贪心就行了,插入的是前缀和后缀的异或2进制序列,从大的开始(贪心)
注:吐槽,其实都是套路,异或和求最大,往往要利用字典树进行贪心
#include <cstdio>
#include <iostream>
#include <ctime>
#include <vector>
#include <cmath>
#include <map>
#include <queue>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long LL;
const int N=3e6+;
const int M=1e5+;
const int INF=0x3f3f3f3f;
struct Node{
int nex[];
}p[N+M];
int cnt;
int newnode(){
++cnt;
p[cnt].nex[]=p[cnt].nex[]=-;
return cnt;
}
int x[M],a[M];
void insert(int pos){
int now=;
for(int i=;i>=;--i){
int cur=(x[pos]&(<<i))>?:;
if(p[now].nex[cur]==-)
p[now].nex[cur]=newnode();
now=p[now].nex[cur];
}
}
int getmax(int pos){
int now=,ret=;
for(int i=;i>=;--i){
int cur=(x[pos]&(<<i))>?:;
if(p[now].nex[cur^]!=-){
ret+=(<<i);
now=p[now].nex[cur^];
}
else now=p[now].nex[cur]; }
return ret; }
int l[M],r[M];
int main()
{
int n;
while(~scanf("%d",&n)){
cnt=-;newnode();
insert();
for(int i=;i<=n;++i){
scanf("%d",&a[i]);
x[i]=(x[i-]^a[i]);
l[i]=max(getmax(i),l[i-]);
insert(i);
}
r[n+]=x[n+]=;
cnt=-;newnode();
insert(n+);
for(int i=n;i;--i){
x[i]=(x[i+]^a[i]);
r[i]=max(getmax(i),r[i+]);
insert(i);
}
LL ret=;
for(int i=;i<n;++i)
ret=max(ret,1ll*l[i]+1ll*r[i+]);
printf("%lld\n",ret);
}
return ;
}
NEUOJ711 异星工厂 字典树+贪心的更多相关文章
- HDU 4825 Xor Sum(经典01字典树+贪心)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others) Total ...
- HDU 5536 Chip Factory 字典树+贪心
给你n个数,a1....an,求(ai+aj)^ak最大的值,i不等于j不等于k 思路:先建字典树,暴力i,j每次删除他们,然后贪心找k,再恢复i,j,每次和答案取较大的,就是答案,有关异或的貌似很多 ...
- 51nod 1526 分配笔名(字典树+贪心)
题意: 班里有n个同学.老师为他们选了n个笔名.现在要把这些笔名分配给每一个同学,每一个同学分配到一个笔名,每一个笔名必须分配给某个同学.现在定义笔名和真名之间的相关度是他们之间的最长公共前缀.设笔名 ...
- 【BZOJ3261】最大异或和 Trie树+贪心
[BZOJ3261]最大异或和 Description 给定一个非负整数序列 {a},初始长度为 N. 有 M个操作,有以下两种操作类型:1 .A x:添加操作,表示在序列末尾添加一个 ...
- ACM学习历程—POJ 3764 The xor-longest Path(xor && 字典树 && 贪心)
题目链接:http://poj.org/problem?id=3764 题目大意是在树上求一条路径,使得xor和最大. 由于是在树上,所以两个结点之间应有唯一路径. 而xor(u, v) = xor( ...
- Xor Sum(讲解异或)【字典树】
Xor Sum 题目链接(点击) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Other ...
- hdu4825 01字典树+贪心
从高位向低位构造字典树,因为高位得到的数更大. AC代码: #include<cstdio> using namespace std; typedef long long LL; cons ...
- Codeforces 706 D. Vasiliy's Multiset (字典树贪心)
题目链接:http://codeforces.com/contest/706/problem/D 题意很简单不多说. 把一个数当作二进制插入字典树中,按照xor的性质,1找0,0找1,贪心即可. 注意 ...
- HDU4825(字典树+贪心)
Xor Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 132768/132768 K (Java/Others)Total S ...
随机推荐
- ccflow学习下载网址
1.ccflow下载:http://ccflow.org/download.aspx 2.说明:http://ccbpm.mydoc.io/ 3.各种文档:bbs.ccflow.org/showtop ...
- hdu2015
http://acm.hdu.edu.cn/showproblem.php?pid=2015 #include<iostream> #include<stdio.h> #inc ...
- fhq_treap 总结
今天跟着zcg大神学了一发fhq_treap 发现在维护区间问题上fhq_treap不仅思维量小,而且代码量更小 是Splay的不错的替代品,不过至今还是有一些问题不能很好的解决 譬如查询某个数在序列 ...
- 使用MyBatis链接MySQL
本文主要介绍了如何使用mybatis进行简单的数据库操作.本人使用的是mybatis3.05. 1.创建数据库表(User表) CREATE TABLE `NewTable` (`userId` bi ...
- s.charAt()
public class ish{public static void main(String[]args){ String s="call me ishmae";System.o ...
- Filter设计实现IP地址限制
示例:创建一个IP过滤Filter,当一个用户发出访问请求的时候,首先通过过滤器进行判断, 如果用户的IP地址被限制,就禁止访问,只有合法的IP才可以继续访问.IP过滤Filter代码如下: IPFi ...
- Mmap的实现原理和应用
http://blog.csdn.net/edwardlulinux/article/details/8604400 很多文章分析了mmap的实现原理.从代码的逻辑来分析,总是觉没有把mmap后读写映 ...
- PCA understanding
PCA understanding 我们希望获取玩具的位置,事实上我们只需要知道玩具在x轴的位置就可以了(但现实不知道).我们利用三个坐标轴,获取了2*3维度的数据,现实中我们如何通过分析六维度数据来 ...
- c 语言练习__去掉多余的空白字符_修正
#include <stdio.h> #include <string.h> #include <errno.h> #define BUF_SIZE 128 /* ...
- css控制UL LI 的样式详解
用<ul>设置导航 <style> #menu ul {list-style:none;margin:0px;} #menu ul li {float:left;} </ ...