题目描述:这里

一道非常好的题

由于强制在线,我们必须要用一些数据结构来处理

考虑分块:将整个序列分块,块内部分预处理,块外部分暴力处理

对于每个块,计算出以这个块的左端点为端点,向右枚举这个块以后的所有点,然后记录下这样一个区间的最大异或值

然后每次查询的时候直接调用即可

#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define ll long long
using namespace std;
struct Trie
{
int to[];
int ed;
}tree[];
struct node
{
ll v;
int rq;
int num;
friend bool operator < (node a,node b)
{
return a.v<b.v;
}
};
priority_queue <node> M;
int rt[];
ll a[];
int n,k;
int tot=;
void ins(ll x,int now,int las)
{
rt[now]=++tot;
now=rt[now],las=rt[las];
for(int i=;i>=;i--)
{
tree[now]=tree[las];
tree[now].ed++;
if((x>>i)&)tree[now].to[]=++tot,now=tree[now].to[],las=tree[las].to[];
else tree[now].to[]=++tot,now=tree[now].to[],las=tree[las].to[];
}
tree[now].ed=tree[las].ed+;
}
ll query(int lq,int rq,ll x,int rk,int temp)
{
if(temp==-)return ;
int t=((x>>temp)&)?:;
int sum=tree[tree[rq].to[t]].ed-tree[tree[lq].to[t]].ed;
if(sum>=rk)return query(tree[lq].to[t],tree[rq].to[t],x,rk,temp-)+(1ll<<temp);
else return query(tree[lq].to[t^],tree[rq].to[t^],x,rk-sum,temp-);
}
int main()
{
scanf("%d%d",&n,&k);
n++;
ins(,,);
for(int i=;i<=n;i++)scanf("%lld",&a[i]),a[i]^=a[i-],ins(a[i],i,i-);
for(int i=;i<=n;i++)M.push((node){query(rt[],rt[i],a[i],,),i,});
ll ans=;
for(int i=;i<=k;i++)
{
node temp=M.top();
M.pop();
ans+=1ll*temp.v;
if(temp.num<temp.rq)M.push((node){query(rt[],rt[temp.rq],a[temp.rq],temp.num+,),temp.rq,temp.num+});
}
printf("%lld\n",ans);
return ;
}

bzoj 2741的更多相关文章

  1. bzoj 2741: 【FOTILE模拟赛】L 分塊+可持久化trie

    2741: [FOTILE模拟赛]L Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 1116  Solved: 292[Submit][Status] ...

  2. BZOJ 2741 【FOTILE模拟赛】L(可持久化trie)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2741 思路:我们先将a变成a的异或前缀,这样问题就变成了,在l-1到r区间内,找出i,j令a[i]^ ...

  3. bzoj 2741 可持久化trie

    首先我们设si为前i个数的xor和,那么对于询问区间[i,j]的xor和,就相当于si-1^sj,那么对于这道题的询问我们可以处理处si,然后对于询问[l,r],可以表示为在区间[l-1,r]里找两个 ...

  4. bzoj 2741 分块+可持久化trie

    多个询问l,r,求所有子区间异或和中最大是多少 强制在线 做法: 分块+可持久化trie 1.对于每块的左端点i,预处理出i到任意一个j,()i,j)间所有子区间异或和中最大为多少,复杂度O(\(n\ ...

  5. BZOJ 2741: 【FOTILE模拟赛】L [分块 可持久化Trie]

    题意: 区间内最大连续异或和 5点调试到现在....人生无望 但总算A掉了 一开始想错可持久化trie的作用了...可持久化trie可以求一个数与一个数集(区间中的一个数)的最大异或和 做法比较明显, ...

  6. BZOJ.2741.[FOTILE模拟赛]L(分块 可持久化Trie)

    题目链接 首先记\(sum\)为前缀异或和,那么区间\(s[l,r]=sum[l-1]^{\wedge}sum[r]\).即一个区间异或和可以转为求两个数的异或和. 那么对\([l,r]\)的询问即求 ...

  7. BZOJ - 2741 分块维护最大连续异或和

    题意:给定\(a[l...r]\),多次询问区间\([l,r]\)中的最大连续异或和\(a_i⊕a_{i+1}⊕...⊕a_{j},l≤i≤j≤r\) 一眼过去认为是不可做的,但题目给出\(n=1.2 ...

  8. bzoj 2741: 【FOTILE模拟赛】L

    Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 .. ...

  9. bzoj 2741 [FOTILE模拟赛] L

    Description 多个询问l,r,求所有子区间异或和中最大是多少 强制在线 Solution 分块+可持久化trie 1.对于每块的左端点L,预处理出L到任意一个i,[L,j] 间所有子区间异或 ...

随机推荐

  1. python调用openstack的api,create_instance的程序解析

    python调用openstack的api,create_instance的程序解析 2017年10月17日 15:27:24 CloudXli 阅读数:848   版权声明:本文为博主原创文章,未经 ...

  2. Verilog语言实现并行(循环冗余码)CRC校验

    1 前言 (1)    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能, ...

  3. session常用对象

    1.object getArrtibute(String name) 获取与名字name相联系的属性 2.void setArrtibute(String name,object) 设置指定名字的属性 ...

  4. Visual Studio Code 背景色自定义

    1 寻找主体配置文件:默认的颜色主题配置文件都位于$RELEASE/resources/app/extensions目录中.以theme-开头的目录即为颜色主题配置(事实上,其中有些是文件图标主题). ...

  5. 【Mac上的PotPlayer视频播放器】Movist Pro for Mac 2.1.2

    [简介] Movist 是Mac上最好用的视频播放器之一,功能齐全,类似Windows上的PotPlayer,今天和大家分享最新的 2.1.2 中文版本,Movist 支持几乎所有常见的视频格式,包括 ...

  6. 腾讯地图 API 调用入门

    本文仅为腾讯地图 API 调用入门,如需进阶学习,请在腾讯位置服务网站上进行学习. 登陆网址 https://lbs.qq.com/ 点击右上角的登陆按钮,需要进行注册按照流程进行就好. 完成之后,选 ...

  7. Java方法参数的传递方式

    程序设计语言中,将参数传递给方法(或函数)有两种方法.按值传递(call by value)表示方法接受的是调用者提供的值:按引用调用(call by reference)表示方法接受的是调用者提供的 ...

  8. 在mysql 5.7中,创建表的字段名中包含双引号的时候,执行会报错

    解决办法,添加 SET SESSION SQL_MODE=ANSI_QUOTES;

  9. import模块/包--软件开发规范

    一. 模块 模块:就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译 ...

  10. 多线程/多进程/异步IO

    SOCK_STREAM :TCPSOCK_Dgram :UDP family=AF_INET: 服务器之间的通信AF_INET6: 服务器之间的通信AF_UNIX: Unix不同进程间的通信 永远遵循 ...