洛谷 P4839 P哥的桶 (線段樹維護線性基)

2021-10-22 11:42:14 字數 1357 閱讀 9407

p哥的桶

題意:

給你 m 個位置和 n 次操作,操作有兩種型別 :

操作一 : 表示在區間[l , r]中選擇任意個位置,使這些位置中的數的異或和最大。

操作二 : 在位置 k 加入乙個數x(每個位置可以有多個數)。

思路:

單點修改 + 區間查詢首先考慮線段樹 , 異或和最大考慮線性基。我們可以用線段樹的每個節點表示這個區間的線性基,在修改的時候把每個包含這個位置的區間都插入一遍這個數就好了。然後查詢可以把小區間的線性基合併到大區間,再根據這個大區間的線性基求解。

**:

#include

using

namespace std;

typedef

long

long ll;

const

int maxn=

1e6+7;

const

int mod =

998244353

;int n,m;

ll sum[maxn][33

];ll ans[33]

;void

update

(int pos,

int val,

int l,

int r,

int rt)

else}}

if(l == r)

int mid =

(l + r)/2

;if(pos <= mid)

update

(pos , val , l , mid , rt <<1)

;if(pos > mid)

update

(pos , val , mid +

1, r , rt <<1|

1);}

void

query

(int l,

int r,

int l,

int r,

int rt)

else}}

}return;}

int mid =

(l + r)/2

;if(l <= mid)

query

(l , r , l , mid , rt <<1)

;if(r > mid)

query

(l, r, mid +

1,r,rt <<1|

1);}

intmain()

else

printf (

"%lld\n"

,val);}

}}

洛谷P4839 P哥的桶 線段樹 線性基

傳送門 題意 n個操作,第k個桶放乙個x,查詢l到r區間的桶任意數的異或最大值。p哥時不時地會找新女朋友,並把新找的女朋友丟進某個桶裡面。我們用 1 k x 來表示p哥找了乙個顏值為x的女朋友,並且丟進了k號桶裡面 p哥每天晚上需要在特定的桶裡面找一些女朋友觀賞。我們用 2 l r 來表示p哥在l號...

洛谷 P哥的桶(線段樹 線性基)

p哥在ioi取得了金牌,現在他開始找女朋友了!p哥現在有nn個桶,他們排成了一排,這些桶可以裝下任意多個女朋友。每個女朋友有乙個固定的顏值 p哥時不時地會找新女朋友,並把新找的女朋友丟進某個桶裡面。我們用1 k x1kx來表示p哥找了乙個顏值為xx的女朋友,並且丟進了kk號桶裡面 p哥每天晚上需要在...

線段樹2 洛谷p3373 線段樹

題目位址 解釋 多了乙個乘法操作,可以考慮優先順序。每次先算乘法。首先,對於乙個區間 和為s 假設已經按 a 乘b進行了操作。值得到的值為 s a b sb ab 假設先乘得到 sb a 這樣相比,add應該還要再乘上乙個b才對,所以,當更新到乙個區間時,為了進行先乘的操作而不讓結果發生變化,應該將...