cogs2638 數列操作 雙標記線段樹

2022-05-01 22:48:14 字數 2580 閱讀 1934

題目大意:給定乙個數列a,你需要支援的操作:區間and,區間or,詢問區間最大值

解題關鍵:

1、雙標記線段樹,注意優先順序(超時)

當涉及多重標記時,定義出標記的優先順序,修改操作時用優先順序高(先下放)的修正優先順序低(後下放)的來保證標記的正確性。

同時維護了區間and,區間or

#include#include

#include

#include

#include

#include

#define maxn 100010

#define inf 0x7fffffff

#define lc rt<<1

#define rc rt<<1|1

namespace

io inline

intqr()

while(ch>='

0'&&ch<='9')

return rev?-x:x;}

}using

namespace

io;using

namespace

std;

int n,q,tago[maxn<<2],taga[maxn<<2],vo[maxn<<2],va[maxn<<2],ma[maxn<<2

],a[maxn];

inline

void up(int

rt)inline

void putand(int rt,int x)

inline

void putor(int rt,int

x)inline

void down(int

rt)

if(tago[rt])

}void build(int l,int r,int

rt)

int mid=(l+r)>>1

; build(l,mid,lc);

build(mid+1

,r,rc);

up(rt);

}void modify(int l,int r,int l,int r,int rt,int x,bool

flag)

}else}}

down(rt);

int mid=l+r>>1

;

if(l<=mid)modify(l,r,l,mid,lc,x,flag);

if(r>mid)modify(l,r,mid+1

,r,rc,x,flag);

up(rt);

}int query(int l,int r,int l,int r,int

rt)int

op,x,y,z;

intmain()

return0;

}

2、乙個same維護區間內相同的位

#include #include 

#include

#define inf 0x3f3f3f3f

using

namespace

std;

const

int maxn = 100010

;const

int bas = 0x7fffffff

;int t[maxn<<2],lazy[maxn<<2],sam[maxn<<2

];int

a[maxn];

inline

void update(int

rt)inline

void pushdown(int

rt)void build(int rt,int l,int

r)

int mid=l+r>>1

; build(rt

<<1

,l,mid);

build(rt

<<1|1,mid+1

,r);

update(rt);

}int

l,r,val,tmp;

inline

bool check_a(int

rt)void modify_a(int rt,int l,int

r) pushdown(rt);

int mid=l+r>>1

;

if(l<=mid) modify_a(rt<<1

,l,mid);

if(r>mid) modify_a(rt<<1|1,mid+1

,r);

update(rt);

}void modify_o(int rt,int l,int

r)

int mid=l+r>>1

; pushdown(rt);

if(l<=mid) modify_o(rt<<1

,l,mid);

if(r>mid) modify_o(rt<<1|1,mid+1

,r);

update(rt);

}int query(int rt,int l,int

r)int

main()

return0;

}

COGS2638 數列操作

給定乙個數列a,你需要支援的操作 區間and,區間or,詢問區間最大值 一行兩個整數n,m,表示數列長度和操作個數。接下來一行有n個整數,第i個數表示ai。接下來m行,每一行均為以下三種操作中的一種 1 l r val ai ai and val l i r 2 l r val ai ai or v...

COGS 2964 數列操作

傳送門 題目描述 給定長度均為 n nn 的數列 a,b a,ba,b,其中 b bb 數列為 1 11 n nn 的全排列,a aa 數列全為 000。你需要支援 q qq 次操作,操作分為 add addad d 和 que ry query quer y 兩種。其中 x x x 表示對 x x...

COGS 2632 數列操作d

傳送門 題目描述 乙個長度為 n nn 的序列,一開始序列數的權值都是 0 00,有 m mm 次操作 支援兩種操作 1 11l llrrrx xx,給區間 l ll r rr 內位置為 pos pospo s 的數加上 po s l x pos l x pos l x000l llr rr,查詢區...