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

2021-08-26 20:53:34 字數 1743 閱讀 1326

p哥在ioi取得了金牌,現在他開始找女朋友了!

p哥現在有nn個桶,他們排成了一排,這些桶可以裝下任意多個女朋友。每個女朋友有乙個固定的顏值

p哥時不時地會找新女朋友,並把新找的女朋友丟進某個桶裡面。我們用1\;k\;x1kx來表示p哥找了乙個顏值為xx的女朋友,並且丟進了kk號桶裡面

p哥每天晚上需要在特定的桶裡面找一些女朋友觀賞。我們用2\;l\;r2lr來表示p哥在ll號桶到rr號桶之間找女朋友。p哥希望觀賞的女朋友顏值異或和盡可能大。

注意:p哥觀賞完這些後會女朋友把它們物歸原位

輸入格式:

第一行兩個整數n,mn,m,依次表示p哥的操作次數、這組資料會涉及到的最大編號

接下來nn行,每行三個整數,表示操作。操作格式如題

輸出格式:

對於每個觀賞操作,輸出p哥能觀賞到的最大顏值異或和

輸入樣例#1:複製

5 3

1 1 2

1 2 3

1 3 4

2 1 2

2 1 3

輸出樣例#1:複製

3

7

輸入樣例#2:複製

11 10

2 6 9

1 9 1523456696

1 1 1818963290

2 6 7

1 1 102229226

2 1 9

2 3 7

1 5 34895532

1 1 1652480680

1 1 1477666032

2 1 10

輸出樣例#2:複製

0

01818963290

01857442578

對於20%的資料,滿足n,m\leq 100n,m≤100

對於40%的資料,滿足n,m\leq 1000n,m≤1000

另有20%的資料,所有詢問滿足l=1,r=ml=1,r=m

對於100%的資料,滿足n,m\leq 5*10^4\;\;\;l\leq r\leq m\;\;\;k\leq m\;\;\;x\leq 2^-1n,m≤5∗104l≤r≤mk≤mx≤231−1

題意:n個操作,第k個桶放乙個x,查詢l到r區間的桶任意數的異或最大值。

思路:線段樹,每個節點維護區間的線性基,因為資料比較隨機,所以判斷線性基滿了直接返回就能優化複雜度。

線性基:將一堆數(設最大值為max)壓成log2(max)個數,可以求出它們異或的最大值,或者能否異或出某個數。

# include # define lson l,mid,id<<1

# define rson mid+1,r,id<<1|1

using namespace std;

typedef long long ll;

const int maxn = 5e4+30;

struct nodea[maxn<<2];

void fun(node &x, int val)

node merge(node x, node y)

node query(int l, int r, int l, int r, int id)

int main()

}return 0;

}

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

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

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

p哥的桶 題意 給你 m 個位置和 n 次操作,操作有兩種型別 操作一 表示在區間 l r 中選擇任意個位置,使這些位置中的數的異或和最大。操作二 在位置 k 加入乙個數x 每個位置可以有多個數 思路 單點修改 區間查詢首先考慮線段樹 異或和最大考慮線性基。我們可以用線段樹的每個節點表示這個區間的線...

洛谷 桶哥的問題 送桶 題解

一讀題,發現與貪心中的任務排程有點類似。保證答案大於等於零,言外之意即為所有任務都可以在合法時間內完成。那麼只要按照任務排程的思路做就行了 用結構體 方便sort 陣列t讀入所有ai bi後按照結束時間從大到小排序。設ans為答案,i為當前要處理的任務在排序後的編號。ans初始為t 1 b,i 1,...