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

题目链接

首先记\(sum\)为前缀异或和,那么区间\(s[l,r]=sum[l-1]^{\wedge}sum[r]\)。即一个区间异或和可以转为求两个数的异或和。
那么对\([l,r]\)的询问即求\([l-1,r]\)中某两个数异或的最大值。
区间中某一个数和已知的一个数异或的最大值可以用可持久化Trie \(O(\log v)\)求出。所以尽量确定一个数,再在区间中求最大值。
而且数据范围提醒我们可以分块。

\(head[i]\)表示第\(i\)块的开头位置,\(Max(l,r,x)\)表示\(x\)\([l,r]\)中某一个数异或的最大值,\(f[i][j]\)表示从第\(i\)块的开始到位置\(j\),某两个数异或的最大值是多少。
那么 \(f[i][j] = \max(f[i-1][j-1], Max(head[i], j-1, A[j]))\)。可以在\(O(n\sqrt n\log v)\)时间内预处理。(\(A[]\)是前缀异或和)
查询的时候,设\(x\)表示\(l\)后面的第一块,若\(l,r\)在同一块里,则 \(ans = Max(l, r, A[i]), i\in[l,r]\)。(对啊 和自己异或也没什么意义)
否则 \(ans = \max(f[x][r], Max(l, r, A[i]))\)\(i\in[l,begin[x]-1]\)

\([1,r]\)的询问,可能会有同上一题一样的边界问题(可以异或0)?把\(A[0]=0\)也试一遍就行了。。

询问复杂度同样\(O(q\sqrt n\log v)\)

//11020kb   8232ms
#include <cmath>
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
#define MAXIN 500000//为什么50000WA+TLE啊 QAQ 
//#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
#define BIT 30
typedef long long LL;
const int N=12005,M=111;int root[N],A[N],bel[N],H[N],f[M][N];
char IN[MAXIN],*SS=IN,*TT=IN;
struct Trie
{#define S N*32int tot,son[S][2],sz[S];void Insert(int x,int y,int v){for(int i=BIT; ~i; --i){int c=v>>i&1;son[x][c]=++tot, son[x][c^1]=son[y][c^1];x=tot, y=son[y][c];sz[x]=sz[y]+1;}}int Query(int x,int y,int v){int res=0;for(int i=BIT; ~i; --i){int c=(v>>i&1)^1;if(sz[son[y][c]]-sz[son[x][c]]>0)x=son[x][c], y=son[y][c], res|=1<<i;elsec^=1, x=son[x][c], y=son[y][c];}return res;}
}T;inline int read()
{int now=0;register char c=gc();for(;!isdigit(c);c=gc());for(;isdigit(c);now=now*10+c-'0',c=gc());return now;
}int main()
{int n=read(),Q=read(),size=sqrt(n);for(int i=1; i<=n; ++i)bel[i]=(i-1)/size+1, T.Insert(root[i]=++T.tot,root[i-1],A[i]=A[i-1]^read());//^不是+ == H[1]=1;for(int i=2,lim=bel[n]; i<=lim; ++i) H[i]=H[i-1]+size;for(int i=1,lim=bel[n]; i<=lim; ++i)for(int j=H[i]+1,rtl=root[H[i]-1]; j<=n; ++j)f[i][j]=std::max(f[i][j-1],T.Query(rtl,root[j-1],A[j]));for(int l,r,x,y,ans=0; Q--; ){x=((LL)read()+ans)%n+1, y=((LL)read()+ans)%n+1;//read()%n+ans%n 都可能爆int。。and LL要在括号里面。。l=std::min(x,y), r=std::max(x,y);--l, ans=0;if(bel[l]==bel[r])for(int i=l,rtl=root[std::max(0,l-1)],rtr=root[r]; i<=r; ++i)ans=std::max(ans,T.Query(rtl,rtr,A[i]));else{ans=f[bel[l]+1][r];for(int i=l,lim=H[bel[l]+1]-1,rtl=root[std::max(0,l-1)],rtr=root[r]; i<=lim; ++i)ans=std::max(ans,T.Query(rtl,rtr,A[i]));}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/SovietPower/p/9719943.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/451155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

传腾讯人事大地震 马化腾将重整公司架构

摘要&#xff1a;5月17日消息&#xff0c;传腾讯董事长马化腾将重新组织公司架构&#xff0c;为腾讯大换血。据悉&#xff0c;腾讯之所以选择互动娱乐部门负责人接任这一重要岗位&#xff0c;也是因为互娱部门业绩持续快速发展&#xff0c;成为了“腾讯帝国”发展的核心驱动力之…

阿里云对象存储OSS与文件存储NAS的区别

一、简介 应用场景&#xff1a;选择一款存储产品&#xff0c;面向文档数据的存取&#xff0c;不会涉及到数据处理。 产品选型主要从OSS和NAS中选择一款&#xff0c;满足文档存储的需求。 二、NAS优缺点 NAS 是一种采用直接与网络介质相连的特殊设备实现数据存储的机制。由于这些…

Thread.yield()

&#xff08;一&#xff09;java yield()方法注释&#xff1a; /*** A hint to the scheduler that the current thread is willing to yield* its current use of a processor. The scheduler is free to ignore this* hint.** <p> Yield is a heuristic attempt to im…

WSDL 详解

转载自&#xff1a;http://kalogen.javaeye.com/blog/418958 WSDL (Web Services Description Language,Web服务描述语言)是一种XML Application&#xff0c;他将Web服务描述定义为一组服务访问点&#xff0c;客户端可以通过这些服务访问点对包含面向文档信息或面向过程调用的服…

MySQL数据类型char与varchar中数字代表的究竟是字节数还是字符数?

https://blog.csdn.net/zyz511919766/article/details/51682407 转载于:https://www.cnblogs.com/zquan/p/9723082.html

传苹果新iPhone显示屏4英寸 可视面积扩大30%

摘要&#xff1a;北京时间5月17日凌晨消息&#xff0c;据熟知内情的消息人士周三称&#xff0c;苹果计划为其下一代iPhone使用更大的显示屏&#xff0c;并已开始从韩国和日本供应商那里订购新的显示屏。业绩人士指出&#xff0c;苹果为下一代iPhone配备更大显示屏的决定意味着&…

Ztree

引入css和js <link rel"stylesheet" href"/${appName}/commons/jslib/ztreeV3.5.15/css/zTreeStyle/zTreeStyle.css" type"text/css"></link> <script type"text/javascript" src"/${appName}/commons/jslib/ztre…

通过IDE生成和手动call调用webservice

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 通过IDE自动生成的代码调用webservice服务 我们的IDE一般来说都是能够通过各种各样的工具来支持我们的开发使我们的开发变得更加的便捷。…

前端性能优化之Lazyload

前端性能优化之Lazyload (Mob前端-冬晨)[JavaScript|技术分享|懒加载] [TOC] Lazyload 简介 前端工作中&#xff0c;界面和效果正在变得越来越狂拽炫酷&#xff0c;与此同时性能也是不得不提的问题。有些项目&#xff0c;页面长&#xff0c;图片多&#xff0c;内容丰富。像商城…

mysql查最大字符串

select MAX(comp_code0) from t_base_company字符串 0 把字符串转成数字转载于:https://www.cnblogs.com/feifeicui/p/9726401.html

中国联通被指乱扣费 返还金额限制用

摘要&#xff1a;宋先生的联通卡开通的是30G加100MB流量的套餐&#xff0c;宋先生上网认真核实了手机清单&#xff0c;发现近期上网流量从未超出。这回联通客服的解释是&#xff1a;“乱扣的费用已经在4月29日返还到你的卡里&#xff0c;这笔费用为‘隐藏扣费’&#xff0c;你是…

JAVA使用FTPClient类读写FTP

见&#xff1a;http://blog.csdn.net/kardelpeng/article/details/6588284 1.首先先导入相关jar包 2.创建一个连接FTP的工具类FTPUtil.Java [java] view plaincopy package com.metarnet.ftp.util; import java.io.IOException; import java.io.InputStream; import j…

揭秘一线互联网企业 前端JavaScript高级面试

第1章 课程介绍本章主要介绍课程的知识大纲&#xff0c;每个章节的解决顺序和主要内容。1-1 导学1-2 课程重要提示1-3 架构 第2章 ES6 语法本章主要讲解工作中最常用的 ES6 语法&#xff0c;包括 Module Class Promise 等语法&#xff0c;还会介绍使用 babel webpack rollup 来…

Java IO类库之ObjectInputStream和ObjectOutPutStream

2019独角兽企业重金招聘Python工程师标准>>> 一、ObjectOutputStream 1 - ObjectOuputStream介绍 ObjectOutputStream(对象字节输出流)&#xff0c;用于将一个序列化对象写入到创建ObjectOutputStream时传入的底层字节输入流中&#xff0c;通过源码可知该类继承Outp…

什么是覆盖索引?如何利用覆盖索引进行SQL语句优化?

如果你不知道什么是覆盖索引&#xff0c;那么SQL性能优化便无从谈起&#xff01; 什么是覆盖索引?如何利用索引进行SQL语句优化&#xff1f; 表结构 150多万的数据&#xff0c;这么一个简单的语句&#xff1a; 慢查询日志里居然很多用了1秒的&#xff0c;Explain的结果是&am…

ARM的商业模式是如何炼成的?

导读&#xff1a;保守、严谨&#xff0c;又有一些皇族气质&#xff0c;作为一家拥有纯正英国血统的公司&#xff0c;ARM看似呆板的作风却让其在移动互联网大潮中势如破竹&#xff0c;没有对手。也许过于看重产业链伙伴的声音&#xff0c;导致ARM的决策有些迟缓&#xff0c;比如…

java 将一段时间分割为两个连续的时间

eg: 20180901 -- 20180930 ->>>> 20180901-20180915 && 20180916-20180930 /*** 获取两日期相差天数** param beginDateStr 时间起点* param endDateStr 时间终点* param TimeType 时间类型 yyyy-MM-dd || yyyyMMdd || ....* return long /天数*/public …

java 中 FtpClient 实现 FTP 文件上传、下载

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 源代码大部分是网上找的&#xff0c;查来查去&#xff0c;找到几个可以用的例子&#xff0c;改来改去&#xff0c;揉合成现在这个样子。…

MongDB集合文档操作符

一、MongoDB - 连接1.启动 MongoDB 服务只需要在 MongoDB 安装目录的 bin 目录下执行 mongod 即可执行启动操作后&#xff0c;mongodb 在输出一些必要信息后不会输出任何信息&#xff0c;之后就等待连接的建立&#xff0c;当连接被建立后&#xff0c;就会开始打印日志信息。可以…

LIMIT M,N分页性能优化方案

利用子查询优化 说明: MySQL 并不是跳过 offset 行&#xff0c;而是取 offsetN 行&#xff0c;然后返回放弃前 offset 行&#xff0c;返回 N 行&#xff0c;那当 offset 特别大的时候&#xff0c;此时使用limit m,n效率就非常的低下。想要提升性能要么控制返回的总页数&#…