給定nn個數x1…xnx1…xn,請你選擇n個數p1…pnp1…pn,使得p1<=x1,p2<=x2......p1<=x1,p2<=x2......,並且p1xorp2…pnp1xorp2…pn的
值盡量大。問這個最大的異或和是多少。
n≤100,0≤xi≤109n≤100,0≤xi≤109
收起
第一行乙個正整數 n 。第二行 n 個非負整數表示 x[1...n] 。
一行乙個數表示答案。32 2 2
3
從每個數的高位開始考慮,如果為1,且答案ans當前該位置為0,#include#include#include#include#include#include#define ll long long則一定可以得到乙個答案等於ans|該位置,若ans該位置已經為1,那麼
ans後面的位置可以被全部置為1,繼續考慮下乙個數。詳情見**。
#define inf 0x3f3f3f3f
using namespace std;
const int n=2e5+100;
const int m=4e5+100;
int arr[n];
int main()
for(int i=1;i<=n;i++){
for(int j=31;j>=0;j--){
if(arr[i]>>j&1){
if(ans>>j&1){
ans|=1 問題描述 給出n個整數,多組詢問求乙個給出的數與這n個數中的乙個數的最大異或的值。輸入格式 第一行乙個整數n,表示有個數字。第二行n個正整數。第三行乙個整數m,表示m個詢問。第四行m個整數,表示m個詢問的整數。輸出格式 共m行,對於每個詢問輸出最大的異或值。輸入樣例 43 5 6 7 31 4 7 ... 展開 題目描述 給定乙個非負整數序列 初始長度為nn。有 mm 個操作,有以下兩種操作型別 a x 新增操作,表示在序列末尾新增乙個數 xx,序列的長度 n 1n 1。q l r x 詢問操作,你需要找到乙個位置 pp,滿足l le p le rl p r,使得 a p oplus a p 1 op... 給定乙個非負整數序列,初始長度為n。有m個操作,有以下兩種操作型別 1 ax 新增操作,表示在序列末尾新增乙個數x,序列的長度n 1。2 qlrx 詢問操作,你需要找到乙個位置p,滿足l p r,使得 a p xor a p 1 xor xor a n xor x 最大,輸出最大是多少。第一行包含兩...最大異或和
最大異或和
3261 最大異或和