P3293 SCOI2016 美味 主席樹好題

2021-09-27 00:10:03 字數 1234 閱讀 7612

題目描述

一家餐廳有 n 道菜,編號 1…n ,大家對第 i 道菜的評價值為 ai(1<=i<=n)。有 m 位顧客,第 i 位顧客的期望值為 bi,而他的偏好值為 xi 。因此,第 i 位顧客認為第 j 道菜的美味度為 bi xor (aj+xi),xor 表示異或運算。

第 i 位顧客希望從這些菜中挑出他認為最美味的菜,即美味值最大的菜,但由於**等因素,他只能從第 li 道到第 ri 道中選擇。請你幫助他們找出最美味的菜。

輸入格式

第1行,兩個整數,n,m,表示菜品數和顧客數。

第2行,n個整數,a1,a2,…,an,表示每道菜的評價值。

第3至m+2行,每行4個整數,b,x,l,r,表示該位顧客的期望值,偏好值,和可以選擇菜品區間。

輸出格式

輸出 m 行,每行 1 個整數,ymax ,表示該位顧客選擇的最美味的菜的美味值。

輸入輸出樣例

輸入 #1

4 41 2 3 4

1 4 1 4

2 3 2 3

3 2 3 3

4 1 2 4

輸出 #197

67說明/提示

對於所有測試資料,1<=n<=2*10 ^ 5,0<=ai,bi,xi<10 ^ 5,1<=li<=ri<=n(1<=i<=m);1<=m<=10^5

思路:大致就是貪心的思想,可以去看洛谷的部落格,我太懶了不想寫

#includeusing namespace std;

#define maxn 1000010

typedef long long ll;

struct treetree[maxn*40];

int tot=0,a[maxn],rt[maxn];

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

void update(int l,int r,int val,int lrt,int &rt)

int query(int l,int r,int l,int r,int x,int y)

}int main()

build(0,mx,rt[0]);

for(int i=1;i<=n;i++) update(0,mx,a[i],rt[i-1],rt[i]);

for(int i=1;i<=m;i++)

else

} printf("%d\n",ans^b);

} return 0;

}

洛谷P3293 SCOI2016 美味

一家餐廳有 n 道菜,編號 1.n 大家對第 i 道菜的評價值為 ai 1 i n 有 m 位顧客,第 i 位顧客的期望值為 bi,而他的偏好值為 xi 因此,第 i 位顧客認為第 j 道菜的美味度為 bi xor aj xi xor 表示異或運算。第 i 位顧客希望從這些菜中挑出他認為最美味的菜,...

洛谷P3293 SCOI2016 美味(主席樹)

傳送門 據說這題做法叫做可持久化trie樹?然而我並不會 首先考慮一下貪心,從高位到低位列舉,如果能選1肯定比選0優 假設已經處理到了 b 的第 i 位,為1 為0的話同理就不說了 那麼只有當 a j x 的第 i 位為0時才能讓答案的第 i 位為 1 考慮把 x 的影響去掉。如果當前的答案是 an...

P3293 SCOI2016 貪心 主席樹

題意 傳送門 p3293 scoi2016 美味 題解求某個數字 x xx 與集合中任一數字異或的最大值,考慮從高位向低位貪心的選擇與 x xx 在這一位的異或值對應的數。假設當前已處理好比第 i ii 位更高的數字,此時區間左界為 lblb lb,假如 x xx 的第 i ii 位為 1 11,那...