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 1 2
1 2 3
1 3 4
2 1 2
2 1 3
3輸入樣例#2:複製7
11 10輸出樣例#2:複製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
0對於20%的資料,滿足n,m\leq 100n,m≤10001818963290
01857442578
對於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,...