题解 | #毒瘤xor#

思路

按位贪心即可,维护一个前缀和统计区间内各数中第i位为1的个数。

代码

#include <bits/stdc++.h>
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0)
using namespace std;
const int maxn = 100010;
int a[maxn];
int sum_1[maxn][40];

int main(){
    ios;
    int n,q,x = 0,l,r;
    cin>>n;
    for(int i = 1;i <= n;i++){
        cin>>a[i];
        for(int j = 1;j <= 31;j++){
            if((1<<(j-1)) & a[i]){
                sum_1[i][j] += (sum_1[i-1][j] + 1);
            }else 
                sum_1[i][j] = sum_1[i-1][j];
        }
    }
    cin>>q;
    while(q--){
        cin>>l>>r;
        x = 0;
        int num = r-l+1;
        for(int i = 1;i <= 31;i++){
            //区间内第i位1的总个数
            int tmp = sum_1[r][i] - sum_1[l-1][i];
            if(tmp*2 < num) x |= (1<<(i-1));
        }
        cout<<x<<'\n';
    }
    return 0;
}
全部评论

相关推荐

06-15 02:05
已编辑
南昌航空大学 数据分析师
Eason三木:你如果想干技术岗,那几个发公众号合唱比赛的经历就去掉,优秀团员去掉,求职没用。然后CET4这种不是奖项,是技能,放到下面的专业技能里或者单独列一个英语能力。 另外好好改改你的排版,首行缩进完全没有必要,行间距好好调调,别让字和标题背景黏在一起,你下面说能做高质量PPT你得展现出来啊,你这简历排版我用PPT做的都能比你做的好。 然后自我评价,你如果要干数据工程师,抗压能力强最起码得有吧。
简历中的项目经历要怎么写
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务