HDU6186 2017广西邀请赛 CS Course (前缀和后缀)

Posted Fy1999

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU6186 2017广西邀请赛 CS Course (前缀和后缀)相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6186

思路:题目要求的删除第q个数候所有数的 & | ^和,所以提前求出前缀和后缀,每次& | ^ 前i-1个和后i+1个即可。注意a^b^b=a;

#include <iostream>
#include <cstdio>

using namespace std;

const long long maxn=1e5+10;

int n,q;
long long f1[maxn],f2[maxn];
long long e1[maxn],e2[maxn];
long long a[maxn];

int main()
{
    while(~scanf("%d%d",&n,&q))
    {
        for(int i=1;i<=n;i++)
    {
        scanf("%lld",&a[i]);
    }
    f1[1]=f2[1]=a[1];
    long long ans=a[1];
    for(int i=2;i<=n;i++)
    {
        f1[i]=f1[i-1]&a[i];
        f2[i]=f2[i-1]|a[i];
        ans^=a[i];
    }
    e1[n]=e2[n]=a[n];
    for(int i=n-1;i>=1;i--)
    {
        e1[i]=e1[i+1]&a[i];
        e2[i]=e2[i+1]|a[i];

    }
    while(q--)
    {
        int x;
        cin>>x;
        if(x==1) printf("%lld %lld %lld\n",e1[2],e2[2],a[x]^ans);
        else if(x==n) printf("%lld %lld %lld\n",f1[x-1],f2[x-1],a[x]^ans);
        else printf("%lld %lld %lld\n",f1[x-1]&e1[x+1],f2[x-1]|e2[x+1],a[x]^ans);
    }
    }

    return 0;
}

 

以上是关于HDU6186 2017广西邀请赛 CS Course (前缀和后缀)的主要内容,如果未能解决你的问题,请参考以下文章

2017 ICPC 广西邀请赛1005 CS Course

2017ICPC/广西邀请赛1001(水)HDU6181

HDU 6186 CS Course(前缀+后缀)

HDU 6186 CS Course 前缀和,后缀和

HDU 6186 CS Course前后缀位运算枚举/线段树

2017ACM/ICPC广西邀请赛