贪心 · 例11-毒瘤xor(贪心\位运算)
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int sum[N][40];
signed main(){
int n; cin >> n;
for(int i = 1; i <= n; ++i){
int x; cin >> x;
for(int j = 0; j < 31; ++j){
if((x >> j) & 1) sum[i][j] = 1;
sum[i][j] += sum[i-1][j];
}
}
int q; cin >> q;
while(q--){
int l, r; cin >> l >> r;
long long res = 0;
for(int i = 0; i < 31; ++i){
int t = sum[r][i] - sum[l-1][i];
//1的个数少于0
if(2 * t < r - l + 1) res += 1 << i;
}
cout << res << endl;
}
return 0;
}

浙公网安备 33010602011771号