Description

FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和。
即对于一个询问,你需要求出max(Ai xor Ai+1 xor Ai+2 ... xor Aj),其中l<=i<=j<=r。
为了体现在线操作,对于一个询问(x,y):
l=min(((x+lastans)mod N)+1,((y+lastans)mod N)+1).
r=max(((x+lastans)mod N)+1,((y+lastans)mod N)+1).
其中lastans是上次询问的答案,一开始为0。

Input

第一行两个整数N和M。
第二行有N个正整数,其中第i个数为Ai,有多余空格。
后M行每行两个数x,y表示一对询问。

Output

共M行,第i行一个正整数表示第i个询问的结果。

Sample Input

3 3
1 4 3
0 1
0 1
4 3

Sample Output

5
7
7

HINT

N=12000,M=6000,x,y,Ai在signed longint范围内。

题解:

把元素数组aa替换为前缀异或和数组qz,则询问变成了指定区间内最大的两个元素异或和。

假如某个元素x已经确定,那么我们只要在区间中找到一个数y,使x xor y最大。

这可以用字典树在O(log)的复杂度内实现。因为是指定的一个区间,所以要采用可持久化字典树。

为了减少复杂度,采取分块的做法。

将n分为√n块,对于每块的第一个元素i,用a[i,j]表示i到j的区间中的最大连续异或和。

转移方式:a[i,j]:=max(a[i,j-1],qz[j]在[i,j-1]的字典树中的最大异或和)。

注意不要忘了以[i,j]异或和作为答案的情况(即qz[i-1]xor qz[j])。

预处理好a数组后,开始处理询问[l,r]。

找到第一个比l大的分块首元素i(i=k*√n+1),分情况讨论。

若r≥i,则答案为max(a[i,r],qz[l≤j≤i-1]在[j+1,r]的字典树中的最大异或和);

若r<i,则答案为max(qz[l≤j≤r]在[l,j-1]的字典树中的最大异或和),注意考虑以[l,j]异或和作为答案的情况(即qz[l-1]xor qz[j])。

代码:

 uses math;
var
t:array[..,..,..]of longint;
a:array[..,..]of longint;
qz,aa:array[..]of longint;
r:array[..]of longint;
b:array[..]of longint;
i,ii,j,k,n,m,block,mm,cnt,x,y,ans:longint;
l,ll,rr:int64;
procedure cl(y,yy,z:longint);
var i:longint;
begin
if z=- then exit;
i:=x and( shl z);
if i> then
begin
inc(cnt); t[yy,]:=t[y,];
t[yy,,]:=cnt; t[yy,,]:=t[y,,]+;
cl(t[y,,],t[yy,,],z-); exit;
end;
inc(cnt); t[yy,]:=t[y,];
t[yy,i,]:=cnt; t[yy,i,]:=t[y,i,]+;
cl(t[y,i,],t[yy,i,],z-);
end;
function qq(y,yy,z:longint):longint;
var i:longint;
begin
if z=- then exit();
i:=x and( shl z);
if i> then
begin
if t[yy,,]-t[y,,]> then
exit(b[z]+qq(t[y,,],t[yy,,],z-));
exit(qq(t[y,,],t[yy,,],z-));
end;
if t[yy,,]-t[y,,]> then
exit(b[z]+qq(t[y,,],t[yy,,],z-));
exit(qq(t[y,,],t[yy,,],z-));
end;
begin
b[]:=;
for i:= to do b[i]:=b[i-]*;
readln(n,m);
for i:= to n do
begin
read(aa[i]); qz[i]:=aa[i] xor qz[i-]; x:=qz[i];
inc(cnt); r[i]:=cnt; cl(r[i-],cnt,);
end;
block:=trunc(sqrt(n)*1.5)+;
block:=min(n,block);
i:=;
while i<=n do
begin
inc(mm);
a[mm,i]:=aa[i];
for j:=i+ to n do
begin
x:=qz[j]; a[mm,j]:=max(a[mm,j-],x xor qz[i-]);
a[mm,j]:=max(a[mm,j],qq(r[i-],r[j-],));
end;
i:=i+block;
end;
for i:= to m do
begin
readln(ll,rr);
l:=max((ll+ans)mod n+,(rr+ans)mod n+);
ll:=min((ll+ans)mod n+,(rr+ans)mod n+);
k:=l; j:=ll; l:=;
while block*l+<=j do inc(l);
if block*l+<=k then
begin
ans:=a[l+,k]; l:=block*l;
for ii:=j to l do
begin
x:=qz[ii-];
ans:=max(ans,qq(r[ii-],r[k],));
end;
end else
begin
ans:=aa[j];
for ii:=j+ to k do
begin
x:=qz[ii]; ans:=max(ans,x xor qz[j-]);
ans:=max(ans,qq(r[j-],r[ii-],));
end;
end;
writeln(ans);
end;
end.

BZOJ2741:[FOTILE模拟赛]L的更多相关文章

  1. BZOJ2741 FOTILE模拟赛L(分块+可持久化trie)

    显然做个前缀和之后变成询问区间内两个数异或最大值. 一种暴力做法是建好可持久化trie后直接枚举其中一个数查询,复杂度O(nmlogv). 观察到数据范围很微妙.考虑瞎分块. 设f[i][j]为第i个 ...

  2. 【BZOJ2741】【块状链表+可持久化trie】FOTILE模拟赛L

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

  3. 【bzoj2741】[FOTILE模拟赛] L

    Portal --> bzoj2741 Solution 突然沉迷分块不能自拔 考虑用分块+可持久化trie来解决这个问题 对于每一块的块头\(L\),预处理\([L,i]\)区间内的所有子区间 ...

  4. 【bzoj2741】[FOTILE模拟赛]L 可持久化Trie树+分块

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

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

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

  6. bzoj 2741 [FOTILE模拟赛] L

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

  7. 【BZOJ2741】【FOTILE模拟赛】L 分块+可持久化Trie树

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

  8. BZOJ2741: 【FOTILE模拟赛】L

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

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

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

随机推荐

  1. html清除浮动的6种方法示例

    使用display:inline-block会出现的情况: 1.使块元素在一行显示2.使内嵌支持宽高3.换行被解析了4.不设置的时候宽度由内容撑开5.在IE6,7下步支持块标签 由于inline-bl ...

  2. 全球CMOS图像传感器厂商

    近期,台湾地区的Yuanta Research发布报告,介绍了其对CMOS图像传感器(CIS)市场的看法,以及到2022年的前景预期. 从该研究报告可以看出,2018年全球CMOS图像传感器的市场规模 ...

  3. Codeforces 479【D】div3

    题目链接:http://codeforces.com/problemset/problem/977/D 题意:给你一个数字序列,定了一个游戏规则.你可以对当前数字进行两个操作 1./ 3  如果这个数 ...

  4. 解决通过vmware克隆虚拟机后,无法上网的问题

    注意:如果源主机是CentOS 6.8,复制出来的机器会出现无法上网. 如果源主机是CentOS 7,复制出来的机器可以正常上网.复制后,只要改下IP地址即可上网. 出现该问题的原因是,我们克隆后,将 ...

  5. [转]Visual Studio 各版本下载

    原文地址:[置顶] Visual Studio 各版本下载 文件名称 文件大小 百度网盘下载 微软官方下载 Visual Studio 2015 Enterprise - 企业版 - 简体中文 3.8 ...

  6. uoj49 轴仓库

    题意: n叠箱子排成一线,第i叠箱子坐标为xi,竖直方向叠着ai个箱子. 可以花费+1s左移或右移一位,也可以在瞬间搬起一个位置的箱子,或将怀里的有且仅有一个箱子放下. 任意选择起点s(可以不与xi重 ...

  7. python使用PIL处理图片后返回给前端的坑

    一.python代码 这里有个坑,之前没有将bytes图片数据转成base64就返回到前端了,但在前端处理的时候,怎么都显示不出图片来,虽然数据拿到了,但bytes被传到前后变str了,所以怎么搞都没 ...

  8. 2019/11/1 CSP模拟

    写在前面的反思 该拿的部分分还是得拿完啊,因为懒+动作慢没有写最后一道题的菊花图和链的情况,其实这两个点并不难.. 虽然只有\(10pts\),但是已经足够往上爬一截了啊,额外的\(10pts\)在今 ...

  9. csv文件格式

    弱渣今天第一次读Kaggle入门文章,知道train data,test data以及提供的result文件大都是以csv文件格式给出的. csv,全称 Comma-Separated Values, ...

  10. 修改sql server表字段的字符串

    网站标题被注入黑链接,使用sql脚本update修改字段内的字符串截取UPDATE [qds0460132_db].[dbo].[Blood_News]   SET [Blood_Name] = SU ...