BZOJ4571 美味(主席樹)

2021-08-14 05:19:46 字數 1473 閱讀 3190

一家餐廳有 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,表示該位顧客的期望值,偏好值,和可以選擇菜品區間。

1≤n≤2×10^5,0≤ai,bi,xi<10^5,1≤li≤ri≤n(1≤i≤m);1≤m≤10^5

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

4 4

1 2 3 4

1 4 1 4

2 3 2 3

3 2 3 3

4 1 2 4

9 7

6 真題真的好誒。。。

如果是乙個啥東西xo

rai 應該還是很好做的

直接搭乙個可持久化trie樹就行了

但是,現在是bx

orai

我們按照位來考慮,

如果當前是第

l 位

那麼,如果能夠貪心的匹配上乙個1的話

顯然,那就在乙個範圍內需要存在ai

的值 因此,對於ai

搭值域線段樹

每次查詢區間內是否存在ai

的值 如果存在,本次貪心有效

否則無效

最後就很簡單了

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define max 500000

inline

int read()

struct node

t[max<<5];

int tot,rt[max],n=200005;

int b,x,l,r;

int n,m,a[max];

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

void modify(int &now,int ff,int l,int r,int pos)

int query(int a,int b,int l,int r,int al,int ar)

int main()

}

BZOJ4571 SCOI2016 美味 題解

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

SCOI2016 主席樹 貪心 美味

描述 一家餐廳有 n 道菜,編號 1 n 大家對第 i 道菜的評價值為 ai 1 i n a i 1 i n ai 1 i n 有 m 位顧客,第 i 位顧客的期望值為 bi,而他的偏好值為 xi 因此,第 i 位顧客認為第 j 道菜的美味度為 bix or a j xi b i xor a j x...

P3293 SCOI2016 美味 主席樹好題

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