NC18979 毒瘤xor(贪心)

首先,每位独立考虑

其次,我们发现是求区间和,因此区间内中的数的对应位,1多就填0,0多就填1,一样多优先填0

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pll;
const int N=1e5+10;
const int mod=1e9+7;
int sum[N][35];
int a[N];
int main(){
    ios::sync_with_stdio(false);
    int n;
    cin>>n;
    int i,j;
    for(i=1;i<=n;i++){
        cin>>a[i];
    }
    for(i=1;i<=n;i++){
        for(j=0;j<=30;j++){
            int x=(a[i]>>j)&1;
            if(x){
                sum[i][j]=sum[i-1][j]+1;
            }
            else{
                sum[i][j]=sum[i-1][j];
            }
        }
    }
    int q;
    cin>>q;
    while(q--){
        int l,r;
        cin>>l>>r;
        int x=0;
        for(i=0;i<=30;i++){
            if(sum[r][i]-sum[l-1][i]<(r-l+2)/2)
                x+=(1<<i);
        }
        cout<<x<<endl;
    }
    return 0;
}
View Code
没有人不辛苦,只有人不喊疼
原文地址:https://www.cnblogs.com/ctyakwf/p/14407851.html