線段樹 區間and or xor

2021-08-30 15:34:27 字數 1501 閱讀 1242

描述 請你維護乙個線段樹

支援一下操作

a x l r 區間 and x

o x l r區間 or x

x x l r 區間 xor x

s l r 區間求和

輸入 乙個數 t表示資料組數 乙個數n表示初始序列長 m表示查詢 隨後n個整數 接下來m次詢問 如上

輸出 s次詢問的答案

樣例輸入

14 1

1 2 4 7

s 0 2

樣例輸出7提示

為防止min-max剪枝 n=1e6 m=1e5 ai<15 t<=3

分析:因為ai<15 所以可以把數拆成4個二進位制位來做,然後就是簡單的區間覆蓋和區間翻轉了

注意區間翻轉時要一併把覆蓋標記翻轉,本人在此wa無數

**:

#include

#define n 1000005

#define lc (p<<1)

#define rc (p<<1|1)

#define mid (tr[p][wei].l+tr[p][wei].r>>1)

using

namespace std;

inline

intread()

int tr_tr,n,m,a[n]

;struct nodetr[n<<2]

[4];

inline

void

pushup

(int p,

int wei)

inline

void

pushnow

(int p,

int wei,

int k)

}inline

void

pushdown

(int p,

int wei)

inline

void

build

(int p,

int l,

int r,

int wei)

build

(lc,l,mid,wei)

,build

(rc,mid+

1,r,wei)

,pushup

(p,wei);}

inline

void

update

(int p,

int ql,

int qr,

int wei,

int k)

inline

intquery

(int p,

int ql,

int qr,

int wei)

intmain()

if(s[0]

=='a')}

if(s[0]

=='o')if

(s[0]==

'x')}}

return0;

}

線段樹(區間樹)

目錄 為什麼要使用線段樹 什麼是線段樹 線段樹融合介面 線段樹實現 線段樹例題 融合介面 author administrator param public inte ce merger package com.suanfa.segmenttree 線段樹 區間樹 author administra...

線段樹 區間樹

每乙個節點儲存的是乙個區間中相應統計值 在treeindex的位置建立表示區間 l.r 的線段樹 private void buildsegmenttree int treeindex,int l,int r int lefttreeindex leftchild treeindex int rig...

區間樹和線段樹

注意 區間樹和線段樹不一樣哦,線段樹是一種特殊的區間樹。區間樹 區間樹是在紅黑樹基礎上 進行擴充套件得到的支援以區間為元素的動態集合的操作,其中每個節點的關鍵值是區間的左端點。通過建立這種特定的結構,可是使區間的元素的查詢和插入都可以在o lgn 的時間內完成。相比於基礎的紅黑樹資料結構,增加了乙個...