傳送門
據說這題做法叫做可持久化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 位顧客希望從這些菜中挑出他認為最...