1. 程式人生 > >[Luogu P5055] 【模板】可持久化文藝平衡樹

[Luogu P5055] 【模板】可持久化文藝平衡樹

洛谷傳送門

題目描述

您需要寫一種資料結構,來維護一個序列,其中需要提供以下操作(對於各個以往的歷史版本):

  1. 在第 p p 個數後插入數 x x
  2. 刪除第 p p 個數。
  3. 翻轉區間 [ l , r ]
    [l,r]
    ,例如原序列是 { 5 , 4 , 3 ,
    2 , 1 } \{5,4,3,2,1\}
    ,翻轉區間 $[2,4] $後,結果是 { 5 , 2 , 3 , 4 , 1 } \{5,2,3,4,1\}
  4. 查詢區間 [ l , r ] [l,r] 中所有數的和。

和原本平衡樹不同的一點是,每一次的任何操作都是基於某一個歷史版本,同時生成一個新的版本(操作 4 4 即保持原版本無變化),新版本即編號為此次操作的序號。

本題強制線上。

輸入輸出格式

輸入格式:

第一行包含一個正整數 N N ,表示操作的總數。

接下來 N N 行,每行前兩個整數 v i , o p t i v_i,opt_i v i v_i 表示基於的過去版本號 ( 0 v i < i ) (0\le v_i<i) o p t i opt_i 表示操作的序號 ( 1 o p t i 4 ) (1\le opt_i\le 4)

o p t i = 1 opt_i=1 ,則接下來兩個整數 p i , x i p_i,x_i ,表示操作為在第 p i p_i 個數後插入數 x x
o p t i = 2 opt_i=2 ,則接下來一個整數 p i p_i ,表示操作為刪除第 p i p_i 個數。
o p t i = 3 opt_i=3 ,則接下來兩個整數 l i , r i l_i,r_i ,表示操作為翻轉區間 [ l i , r i ] [l_i,r_i]
o p t i = 4 opt_i=4 ,則接下來兩個整數 l i , r i l_i,r_i ,表示操作為查詢區間 [ l i , r i ] [l_i,r_i] 的和。

強制線上規則:
令當前操作之前的最後一次 4 4 操作的答案為 l a s t a n s lastans (如果之前沒有 4 4 操作,則 l a s t a n s = 0 lastans=0 )。
則此次操作的 p i , x i p_i,x_i ​ 或 l i , r i l_i,r_i ​ 均按位異或上 l a s t a n s lastans 即可得到真實的 p i , x i p_i,x_i ​ 或 l i , r i l_i,r_i

輸出格式:

對於每個序號為 4 4 的查詢操作,輸出一行一個數表示區間的和。

輸入輸出樣例

輸入樣例#1:

10
0 1 0 1
1 1 1 2
2 4 1 2
3 1 2 0
4 4 2 1
5 3 5 7
6 4 5 6
4 1 7 1
8 3 4 6
9 4 4 1

輸出樣例#1:

3
4
5
10

說明

強制線上:以下針對 p i , x i , l i , r i p_i,x_i,l_i,r_i 的限制均是按位異或 l a s t a n s lastans 後的限制。

對於 30 % 30\% 的資料, N 5000 N\le 5000

對於另外 30 % 30\% 的資料, v i = i 1 v_i=i-1

對於 100 % 100\% 的資料, 1 N 2 × 1 0 5 1\le N\le 2\times 10^5 1 0 6 < x i < 1 0 6 -10^6<x_i<10^6

相關推薦

[Luogu P5055] 模板持久化文藝平衡

洛谷傳送門 題目描述 您需要寫一種資料結構,來維護一個序列,其中需要提供以下操作(對於各個以往的歷史版本): 在第 p

洛谷p5055模板持久化文藝平衡

關於 clone tex mat clas long long pri rand() out 可持久化\(\text{fhq-treap}\)。 比較常用的平衡樹一般就是\(\text{fhq-treap}\)和\(\text{splay}\)了,因為\(\text{spl

luoguP5055 模板持久化文藝平衡

https://www.luogu.org/problemnew/show/P5055 如果你還不會可持久化平衡樹,請右轉洛谷題解區 我們考慮一下可持久化的複雜度為什麼是正確的 每一次操作時,$ fhq $ $ treap $ 的複雜度是期望 $ log ( n ) $ 的,而 $ Splay $ 是均

Luogu5055 模板持久化文藝平衡(fhq-treap)

  注意下傳標記時也需要新建節點。空間開的儘量大。 #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #inclu

LUOGU P3919 模板持久化陣列(主席)

傳送門 解題思路   給每一時刻建一棵線段樹維護當前時刻的值,然後修改的時候直接修改,查詢的時候直接查,記住查詢完後一定要複製。 程式碼 #include<iostream> #include<cstdio> #include<cstring> #include&l

LG5055持久化文藝平衡

ins fhq and sdi sum urn 平衡樹 inline ref 【LG5055】可持久化文藝平衡樹 題面 洛谷 題解 終於不可以用\(Trie\)水了。。。 和普通的\(FHQ\;treap\)差不多 註意一下\(pushdown\)、\(split\)要新開

[Luogu 3919]模板持久化數組(持久化線段/平衡

ins eset blog sta -s ctime it is put tex Description 如題,你需要維護這樣的一個長度為 N 的數組,支持如下幾種操作 在某個歷史版本上修改某一個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每

Luogu P3835 模板持久化平衡

P3835 【模板】可持久化平衡樹 題意 題目背景 本題為題目普通平衡樹的可持久化加強版。 題目描述 您需要寫一種資料結構(可參考題目標題),來維護一些數,其中需要提供以下操作(對於各個以往的歷史版本): 插入\(x\)數 刪除\(x\)數(若有多個相同的數,因只刪除一個,如果沒有請忽略

LUOGU P3919 模板持久化數組(主席)

tchar printf 傳送門 org upd mat href show 數組 傳送門 解題思路   給每一時刻建一棵線段樹維護當前時刻的值,然後修改的時候直接修改,查詢的時候直接查,記住查詢完後一定要復制。 代碼 #include<iostream> #i

Luogu P3919 模板持久化陣列(持久化線段/平衡

題面跳轉站 題目背景 UPDATE : 最後一個點時間空間已經放大 標題即題意 有了可持久化陣列,便可以實現很多衍生的可持久化功能(例如:可持久化並查集) 題目描述 如題,你需要維護這樣的一個長度為 NN 的陣列,支援如下幾種操作 在某個歷史版

Luogu P3834 模板持久化線段 1(主席

while iostream 可持久化線段樹 const str stream con urn pac 就是板子、、、 節點中維護的值,就是1-i之間這個區間內出現了數的次數(權值線段樹?霧)。然後當我們查詢的時候,就是利用到了前綴和的思想,拿左端點那棵樹和右端點一減~

模板持久化Treap

split getch name 後繼 pan nod sed lose 技術 洛谷3835 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstdlib> 4 #de

模板持久化線段 1(主席

base math 一次 數據 mar 指定 das min 第k小 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間

洛谷P3402 模板持久化並查集(持久化線段,線段

std 樹節點 https case 深度 build eof spa 復雜度 orz TPLY 巨佬,題解講的挺好的。 這裏重點梳理一下思路,做一個小小的補充吧。 寫可持久化線段樹,葉子節點維護每個位置的fa,利用每次只更新一個節點的特性,每次插入\(logN\)個節點,

[解題報告]P3919 模板持久化數組(持久化線段/平衡

版本 持久化 完全 直接 n) ace 思路 efi mes 題目簡述 維護一個長度為N的數組,支持如下幾種操作: 在某個歷史版本上修改某一個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作(對於操作2,即為生成一個完全一樣的版本,不作任何改動),就會

洛谷 P3835 模板持久化平衡

正常 發生 using 我沒 持久化 pro 現在 class 小數 這個題也是可以用可持久化線段樹來解決的。 值域線段樹(也有的叫權值線段樹)可以用來維護一個可重集,並實現一些一般情況下平衡樹才能實現的事情。 如果用值來當做區間左右端點,每個葉子節點上存某個值出現的次數,

刷題洛谷 P3834 模板持久化線段 1(主席

!= tchar 這樣的 信息 reg har mem hair define 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於指定的閉區間查詢其區間內的第K小值。

P3834 模板持久化線段 1(主席

lose printf TE article 發現 AC 但是 || amp 題目背景 這是個非常經典的主席樹入門題——靜態區間第K小 數據已經過加強,請使用主席樹。同時請註意常數優化 題目描述 如題,給定N個正整數構成的序列,將對於

P3919 模板持久化數組(持久化線段/平衡

數組 const spa lse 建立 clu reset c++ 包含 題目描述 如題,你需要維護這樣的一個長度為 N 的數組,支持如下幾種操作 在某個歷史版本上修改某一個位置上的值 訪問某個歷史版本上的某一位置的值 此外,每進行一次操作

洛谷 P3919 模板持久化數組(持久化線段/平衡)-持久化線段(單點更新,單點查詢)

map sse 依次 數據規模 操作 str tps () 發現 P3919 【模板】可持久化數組(可持久化線段樹/平衡樹) 題目背景 UPDATE : 最後一個點時間空間已經放大 標題即題意 有了可持久化數組,便可以實現很多衍生的可持久化功能(例如:可持久化並查集