洛谷P3293 SCOI2016 美味(主席樹)

2022-02-27 23:43:03 字數 1232 閱讀 5142

傳送門

據說這題做法叫做可持久化trie樹?(然而我並不會)

首先考慮一下貪心,從高位到低位列舉,如果能選1肯定比選0優

假設已經處理到了$b$的第$i$位,為1(為0的話同理就不說了)

那麼只有當$a_j+x$的第$i$位為0時才能讓答案的第$i$位為$1$

考慮把$x$的影響去掉。如果當前的答案是$ans$(即令前面幾位貪心情況下最大且第$i$位為0時的$a$),那麼只有在區間$[ans-x,ans+(1《如果存在,那麼$ans$第$i$位變為0(存在前$i$位與之相同且第$i$位為0的$a_i$),否則變為1(只存在前$i$位與之相同且第$i$位為0的$a_i$)

然後查詢是兩個區間限制主席樹套上去就好了

1

//minamoto

2 #include3 #include4

using

namespace

std;

5#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?eof:*p1++)

6char buf[1

<<21],*p1=buf,*p2=buf;

7 templateinline bool cmax(t&a,const t&b)

8 templateinline bool cmin(t&a,const t&b)

9 inline int

read()

19char sr[1

<<21],z[20];int c=-1

,z;20 inline void ot()

21 inline void print(int

x)26

const

int n=2e5+5,m=n*20;27

intrt[n],l[m],r[m],sum[m],a[n],cnt,n,q,m;

28void update(int &now,int last,int x,int l=0,int r=m)

35int query(int u,int v,int ql,int qr,int l=0,int r=m)

42 inline int find(int u,int v,int ql,int

qr)47

intmain()

60 print(ans^b);61}

62ot();

63return0;

64 }

洛谷P3293 SCOI2016 美味

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

P3293 SCOI2016 貪心 主席樹

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

P3293 SCOI2016 美味 主席樹好題

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