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.pswp.cn/news/451155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451155.shtml
英文地址,請注明出處:http://en.pswp.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效率就非常的低下。想要提升性能要么控制返回的總頁數&#…