1. 程式人生 > >luoguP4887 第十四分塊(前體) 莫隊的二次離線法

luoguP4887 第十四分塊(前體) 莫隊的二次離線法

luoguP4887 第十四分塊(前體)

題目傳送門

分析

掌握核心莫隊科技。
如果說題目中詢問的是某個區間中的兩兩元素子區間這種沒有辦法在 O ( 1 ) O(1) 統計的答案,有一種黑科技叫做莫隊二次離線。
考慮莫隊的一次插入與刪除。
[

l , r ] > [ l , r +
1 ] [l,r]->[l,r+1]
這個過程中,需要變更的資訊是 [ l , r ]
a [ r + 1 ] [l,r]\oplus a[r+1]

考慮開桶,也需要 C 14 7 = 3432 C_{14}^7=3432 的複雜度來完成更新。
這個時候發現,變更的資訊是可差分的。
D e l t a ( l , r ) = A n s ( [ 1 , r ] a [ r + 1 ] ) A n s ( [ 1 , l 1 ] a [ r + 1 ] ) Delta(l,r)=Ans([1,r]\oplus a[r+1])-Ans([1,l-1]\oplus a[r+1])
不難發現,如果說能夠預處理出 [ 1 , x ] [1,x] 區間內的貢獻的桶,我們可以在 O ( 1 ) O(1) 的複雜度內處理 A n s ( [ 1 , x ] a k ) Ans([1,x]\oplus a_k) ,而從 [ 1 , x ] > [ 1 , x + 1 ] [1,x]->[1,x+1] ,僅僅需要把 a [ x + 1 ] v i a[x+1]\oplus v_i 塞到桶裡面,其中 v i v_i 是所有二進位制下恰有 k k 1 1 的數。
所以考慮把莫隊的所有 O ( n m ) O(n\sqrt m) 個操作暴力記錄。開一個桶掃描線即可做到 O ( 3432 n + n m ) O(3432n+n\sqrt m) ,這就是所謂二次離線
然而出題人卡了空間。
這個時候就要考慮莫隊的性質。
對於一個固定的詢問 [ s t , e d ] [st,ed] ,莫隊僅僅會做兩種操作:

  1. 固定 l l ,將 r r 移到 e d ed
  2. 固定 r r ,將 l l 移到 s t st

假設當前的操作是 [ l , r ] > [ l , e d ] [l,r]->[l,ed]
答案就是 x = r + 1 e d D e l t a ( l , x ) = x = r + 1 e d A n s ( [ 1 , x 1 ] a [ x ] ) A n s ( [ 1 , l 1 ] a [ x ] ) \sum_{x=r+1}^{ed}Delta(l,x)=\sum_{x=r+1}^{ed}Ans([1,x-1]\oplus a[x])-Ans([1,l-1]\oplus a[x])
顯然 A n s ( [ 1 , x ] a [ x + 1 ] ) Ans([1,x]\oplus a[x+1]) 僅僅和 x x 有關,可以預處理+字首和。
A n s ( [ 1 , l 1 ] a [ x ] ) Ans([1,l-1]\oplus a[x]) l l 是固定不變的,掃描線的時候可以一起處理區間 [ 1 , l 1 ] [1,l-1] x [ r + 1 , e d ] x\in[r+1,ed] 的貢獻。所以開一個鄰接表或者 v e c t o r vector 記錄下要算的區間即可。具體地,在 l 1 l-1 位置插入 [ r + 1 , e d ] [r+1,ed] 區間,表示要計算 [ r + 1 , e d ] [r+1,ed] 中每個數的貢獻,並且標記這個貢獻對應的位置。
而其他情況是類似的,討論一下即可。
這樣的話就可以在 O ( m ) O(m) 的空間內完成這道題。

程式碼

#include<bits/stdc++.h>
const int N = 1e5 + 10;
int ri() {
    char c = getchar(); int x = 0, f = 1; for(;c < '0' || c > '9'; c = getchar()) if(c == '-') f  = -1;
    for(;c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) - '0' + c; return x * f;
}
int v[N], a[N], pr[N], cnt[N], nx[N << 1], C, tp, n, m, k, B;
long long Ans[N], cur, A[N << 1], s1[N], s2[N];
struct Q {int l, r, id; void in(int i) {l = ri(), r = ri(); id = i;}}q[N], to[N << 1];
void Add(int u, Q a) {to[++C] = a; nx[C] = pr[u]; pr[u] = C;}
bool cmp(Q a, Q b) {
    int x = a.l / B, y = b.l / B;
    return x == y ? (x & 1 ? a.r > b.r : a.r < b.r) : x < y;
}
int main() {
    n = ri(); m = ri(); k = ri
            
           

相關推薦

luoguP4887 (前體) 離線

luoguP4887 第十四分塊(前體) 題目傳送門 分析 掌握核心莫隊科技。 如果說題目中詢問的是某個區間中的兩兩元素,子區間這種沒有辦法在 O

牛客練習賽10 E題 數列查找 (思想 +

意義 blog str aps mes blank ref pair rem 題目鏈接 數列查找 考慮分塊然後跑莫隊, 設$c[i]$為$i$在當前維護的區間內出現的次數, $g[i]$為在當前維護的區間內有多少個數出現次數為$i$, $bg[i]$把出現次數分塊

】【P4396】【AHOI2013】作業

傳送門 Description 此時己是凌晨兩點,剛剛做了Codeforces的小A掏出了英語試卷。英語作業其實不算多,一個小時剛好可以做完。然後是一個小時可以做完的數學作業,接下來是分別都是一個小時可以做完的化學,物理,語文......小A壓力巨大。 這是小A碰見了一道非常噁心的數學題,給定了一個長度

python

atm logs 用戶認證 log 購物車 裝飾 日常 。。 image 作業:ATM 作業需求: 模擬實現一個ATM + 購物商城程序 額度 15000或自定義 實現購物商城,買東西加入 購物車,調用信用卡接口結賬 可以提現,手續費5% 每月22號出賬單,每月10號為還

Java(章)

class 小寫字母 圓點 對象 文件夾 頂級域名 前綴 部分 不同 第十四章 1、Java中的包(package) 2.1 包,對應到磁盤中的文件夾 2.2 新建一個class,默認保存在缺省包中 2.3

Python開發【篇】:Web框架本質

中一 用戶 contain get pattern app sta doc connect Web框架本質 眾所周知,對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。 1 2 3 4 5 6 7 8 9

python學習節(正則)

image all flags 正則 asdf alt afa images lag python2和python3都有兩種字符串類型strbytes re模塊find一類的函數都是精確查找。字符串是模糊匹配 findall(pattern,string,flags) r

章 springboot + profile(不同環境讀取不同配置)

img ont 代碼執行 ring stp uri div () rim 具體做法: 不同環境的配置設置一個配置文件,例如:dev環境下的配置配置在application-dev.properties中;prod環境下的配置配置在application-prod.

手機影音天,本地音樂列表的展示與播放(利用視頻播放的布局)

獲取本地音樂 共用視頻播放頁面來播放音樂 代碼已經托管到碼雲,有興趣的小夥伴可以下載看看 https://git.oschina.net/joy_yuan/MobilePlayer 效果圖: Android系統提供了MediaScanner,MediaProvider,MediaS

【第一組】沖刺例會紀要

吐槽 開發 工作 司機 image 功能 9.png 放大 src 開發小組:Neu Old Driver 沖刺經理:何圖 小組成員:李白洋、王彬宇、李恒雨、黃文睿、安迪 1、 昨天做了什麽 黃文睿:Binding 李白洋:完成空教室頁面 何圖:完成東大老司機圖標 李恒

oracle課堂隨筆--

唯一性 default arc reference ref market zone 日期時間 替代 集合操作 select employee_id, job_id from employees union all 不去除 保留重復值 select emp

篇 現象

幫助 產生 這也 人類 被人 規律 生命 快速 宇宙 第十四篇 現象 “現象”的產生是由宇宙當中各種因素交匯的結果。現象是萬物在宇宙中的展現,它可以被人為創造,也可以由宇宙規律自行產生。現象能幫助人類逐步地了解宇宙的本質,也能幫助人類更好地了解自己。 當一個生命對

Oracle課程檔案,

分隔 arch set arc figure put 數據文件 conf bsp 備份數據文件:SQL> select file_id, file_name from dba_data_files; backup:備用(備份) datafile:數據文

python自動化開發-[九天]-頁,cookie,session

dex delet value ati coo socket客戶端 自定義分頁 blog 協議 今日概要:   1、cookie和session   2、csrf 跨站請求偽造   3、自定義分頁 一、上節回顧:   http請求的本質: - Http請求本質 瀏覽器

HTML學習筆記 cs2D3D展示基礎 節 (原創) 參考使用表

safari 學習筆記 ans com div2 s2d spa har tex <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8">

webug關:存儲型XSS

alt bsp images cnblogs web 語句 技術 mage blog 第十四關:存儲型XSS 打開發現是評論區 留言加入xss語句 webug第十四關:存儲型XSS

python學習之課時--基本數據練習

名稱 pri 提示 大於 不足 goods 賬戶 bsp money 購物車 功能要求: 要求用戶輸入總資產,例如:5000 顯示商品列表,讓用戶根據序號選擇商品,加入購物車 購買,如果商品總額大於總資產,提示賬戶余額不足,否則,購買成功。 附加:可充值

導論讀書筆記-章-數據結構的擴張

步驟 檢驗 int 由於 旋轉 著色 推出 log 14.3 算法導論第14章 數據結構的擴張 一些工程應用需要的只是標準數據結構, 但也有許多其他的應用需要對現有數據結構進行少許的創新和改造, 但是只在很少情況下需要創造出全新類型的數據結構, 更經常的是通過存儲額外信息的

我的物聯網項目() 布式事務

分布式 spa 穩定性 保存 說過 吞吐量 處理方式 目的 解決方法 2.0平臺服務化架構,必然分庫,分庫又必然面臨一個分布式事務處理問題,所以無論是設計還是編碼遠遠比1.0單體應用架構的工作量要大。不過做任何事情,重點不在實施,而是在思路,所以要解決分布式事務問題,還得先