luogu P3293 [SCOI2016]美味
傳送門(mén)
異或最大值應(yīng)該是要用\(trie\)樹(shù),從高位往低位貪心,雖然這里詢(xún)問(wèn)區(qū)間的數(shù)都要加上\(x\),但是仍然可以利用這個(gè)思想
從高往低位考慮,我們要找一個(gè)加上\(x\)后當(dāng)前二進(jìn)制位\(j\)不等于\(b\)的當(dāng)前位的數(shù),假設(shè)\(b\)當(dāng)前位為0,我們就要現(xiàn)在找個(gè)數(shù)加上\(x\)后當(dāng)前位\(j\)為1,記之前選出的數(shù)為\(ans\),那么我們就要找一個(gè)在\([ans+(1<<j)-x,ans+(1<<j)-(1<<j)-1-x]\)區(qū)間內(nèi)的數(shù);如果\(b\)當(dāng)前位為1,那么取值范圍為\([ans-x,ans-(1<<j)-1-x]\).如果有這個(gè)數(shù),那么\(ans\)當(dāng)前位\(j\)就可以等于\(b\)當(dāng)前位\(xor\ 1\),否則就反過(guò)來(lái)
這個(gè)操作可以用主席樹(shù)查詢(xún)某區(qū)間的數(shù)出現(xiàn)次數(shù)的操作實(shí)現(xiàn)
#include<bits/stdc++.h> #define LL long long #define il inline #define re register #define db double #define eps (1e-7)using namespace std; const int N=500000+10; const LL inf=1ll<<45; il LL rd() {re LL x=0,w=1;re char ch=0;while(ch<'0'||ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}return x*w; }#define mid ((l+r)>>1)int s[N*20],ch[N*20][2],rt[N],tt; int n,m,kk,L,R,a[N]; il void inst(int p) {rt[p]=++tt;int o1=rt[p],o2=rt[p-1],l=0,r=n;s[o1]=s[o2]+1;do{if(a[p]<=mid){ch[o1][0]=++tt,ch[o1][1]=ch[o2][1];o1=ch[o1][0],o2=ch[o2][0],r=mid;}else{ch[o1][0]=ch[o2][0],ch[o1][1]=++tt;o1=ch[o1][1],o2=ch[o2][1],l=mid+1;}s[o1]=s[o2]+1;}while(l<r); } int quer(int o1,int o2,int l,int r,int ll,int rr) {if(ll<=l&&r<=rr) return s[o1]-s[o2];int an=0;if(ll<=mid) an+=quer(ch[o1][0],ch[o2][0],l,mid,ll,rr);if(rr>mid) an+=quer(ch[o1][1],ch[o2][1],mid+1,r,ll,rr);return an; } bool ok(int l,int r,int ll,int rr) {ll=max(ll,0),rr=min(rr,n);return ll<=rr?quer(rt[r],rt[l-1],0,n,ll,rr):0; } int q;int main() {///no O2m=rd(),q=rd();for(int i=1;i<=m;i++) n=max(n,a[i]=rd());for(int i=1;i<=m;i++) inst(i);while(q--){int b=rd(),x=rd(),ll=rd(),rr=rd(),ans=0;for(int i=17;i>=0;i--){int nw=ans|(((b>>i&1)^1)<<i);if(ok(ll,rr,nw-x,nw+(1<<i)-1-x)) ans=nw;else ans|=(b>>i&1)<<i;}printf("%d\n",ans^b);}return 0; }轉(zhuǎn)載于:https://www.cnblogs.com/smyjr/p/9739276.html
總結(jié)
以上是生活随笔為你收集整理的luogu P3293 [SCOI2016]美味的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据结构实验之链表一:顺序建立链表(SD
- 下一篇: leetcode347 - Top K