zoukankan      html  css  js  c++  java
  • [CC-XXOR]Chef and Easy Problem

    [CC-XXOR]Chef and Easy Problem

    题目大意:

    给你一个长度为(n(nle10^5))的序列(A(A_i<2^{31}))(m(mle10^5))次询问,每次给定一个区间([l,r]),求使得(sum_{i=l}^r(A_ioplus x))最大的(x(x<2^{31}))是多少。

    思路:

    按位考虑,如果这一位是(1)的数比较多那么就把(x)的这一位弄成(0),否则弄成(1)

    源代码:

    #include<cstdio>
    #include<cctype>
    inline int getint() {
    	register char ch;
    	while(!isdigit(ch=getchar()));
    	register int x=ch^'0';
    	while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
    	return x;
    }
    const int N=1e5+1,B=31;
    int a[N];
    int sum[N][B];
    int main() {
    	const int n=getint(),q=getint();
    	for(register int i=1;i<=n;i++) {
    		const int x=getint();
    		for(register int j=0;j<B;j++) {
    			sum[i][j]=sum[i-1][j];
    			if((x>>j)&1) sum[i][j]++;
    		}
    	}
    	for(register int i=0;i<q;i++) {
    		const int l=getint(),r=getint(),len=r-l+1;
    		int x=0;
    		for(register int i=0;i<B;i++) {
    			if((sum[r][i]-sum[l-1][i])*2<len) x|=1<<i;
    		}
    		printf("%d
    ",x);
    	}
    	return 0;
    }
    
  • 相关阅读:
    软件工程概论第十二周学习进度
    冲刺第十天
    评价搜狗输入法
    冲刺第九天
    冲刺第八天
    冲刺第七天
    冲刺第六天
    冲刺第五天
    软件工程概论第十一周学习进度
    冲刺第四天
  • 原文地址:https://www.cnblogs.com/skylee03/p/9638747.html
Copyright © 2011-2022 走看看