題目大意:給定a[1...n],q次詢問求a[l...r]的異或組合再或上k的最大值。
思路:學長的ppt上講過怎麼維護區間線性基。(不是線段樹)詳情看**的插入操作。因為最後答案要或上k,因此k的二進位製上為1的位最後一定為1,那麼我們自然希望去掉這些位的影響,這樣查詢到的[l,r]的最大異或值再或上k就是最優解。那麼我們把k按位取反後(設為t),將每乙個數&上t再插入到線性基中即可。
#include#include#includeusing namespace std;
typedef long long ll;
const int maxn=1e4+5;
int b[maxn][35],pos[maxn][35],base[35];
inline bool insert(int h,int x)//維護區間[1,h]內的線性基
int main()
for(int i=1;i<=n;i++)
for(int i=0;i}
return 0;
}
851 喧鬧和富有
在一組 n 個人 編號為0,1,2,n 1 中,每個人都有不同數目的錢,以及不同程度的安靜 quietness 為了方便起見,我們將編號為x的人簡稱為 personx 如果能夠肯定 personx比 persony更有錢的話,我們會說richer i x,y 注意richer可能只是有效觀察的乙個子...
851 喧鬧和富有
讀完題後,感覺是個有向圖,我的理解是對於乙個點 這裡即所謂person 取所有能走到這個點的點裡對應的quiet最小的點。找能到達點x的點集中最小quiet的這個過程可定義為func x 這樣問題就簡化為了對點x,找與x有直接關聯的 即存在於richer陣列中 的點集ys中的min func y 可...
851 喧鬧和富有
題目描述 在一組 n 個人 編號為 0,1,2,n 1 中,每個人都有不同數目的錢,以及不同程度的安靜 quietness 為了方便起見,我們將編號為 x 的人簡稱為 person x 如果能夠肯定 person x 比 person y 更有錢的話,我們會說 richer i x,y 注意 ric...