
字典树存储+贪心每次从高位选相反的
//#include <iostream>
//#include <cstring>
//#include <iomanip>
//#include <algorithm>
//#include <queue>
//#include <stack>
//#include <vector>
//#include <set>
//#include <map>
//#include <cmath>
//#include <cstdio>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef __int128 bll;
const ll maxn = 1e7+100;
const ll mod = 1e9+7;
const ld pi = acos(-1.0);
const ll inf = 1e18;
const ld eps = 1e-5;
const ld e = exp(1);
ll n,trie[maxn][2],ans = -inf,cnt = 1;
void add(ll str)
{
ll to = 1;
for(ll i = 32; i >= 0; i--)
{
ll k = (str >> i) & 1; //str在二进制下的第i位
if(trie[to][k] == 0)
{
cnt++;
trie[to][k] = cnt;
}
to = trie[to][k];
}
return ;
}
ll query(ll str)
{
ll res = 0,to = 1;
for(ll i = 32; i >= 0; i--)
{
ll k = (str >> i) & 1;
if(trie[to][k^1] != 0)
{
to = trie[to][k^1];
res += (1 << i);
}
else
{
to = trie[to][k];
}
}
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n;
for(ll i = 1; i <= n; i++)
{
ll x;
cin >> x;
ans = max(ans,query(x));
add(x);
}
cout << ans << endl;
return 0;
}
本文介绍了一种结合字典树存储和贪心算法的方法,用于从高位选择相反数,实现高效的数值处理。通过C++代码示例,详细展示了如何构建字典树并进行查询和添加操作,以最大化目标值。
499

被折叠的 条评论
为什么被折叠?



