• Codeforces-703D Mishka and Interesting sum


    题目大意:

    给你m个区间[l, r],让你计算区间[l, r]中出现偶数次的数的异或和

    解题思路:

    异或的性质比较明显 a ^ a = 0

    也就是说如果让你计算奇数次的异或和这就是裸题直接搞就行。

    但是是偶数的话,我们的想法其实很简单,对于[l, r]区间内出现的数,都再多异或一次

    比如1 2 1 3 3对于这个序列,计算偶数次可以1 ^ 2 ^ 1 ^ 3 ^ 3 ^ 1 ^ 2 ^ 3这个结果就是2

    那么实现的话就是树状数组来实现用线段树应该也行吧= =

    代码:

    #include <map>
    #include <cstdio>
    #include <algorithm>
    using namespace std;
    
    typedef struct node{
        int l, r, id;
        bool operator < (node a){
            return r < a.r;
        }
    }P;
    
    const int maxn = 1e6 + 10;
    
    P p[maxn];
    int n, a[maxn], num[maxn], pre[maxn], res[maxn], tree[maxn];
    
    inline int lowbit(int k){
        return k & (-k);
    }
    void add(int k, int num){
        while(k <= n){
            tree[k] ^= num;
            k += lowbit(k);
        }
    }
    int query(int k){
        int ans = 0;
        while(k >= 1){
            ans ^= tree[k];
            k -= lowbit(k);
        }
        return ans;
    }
    int main(){
        int m;
        map<int, int> mp;
        mp.clear();
        scanf("%d", &n);
        for(int i = 1; i <= n; ++i){
            scanf("%d", &a[i]);
            num[i] = num[i-1] ^ a[i];
            pre[i] = mp[a[i]];
            mp[a[i]] = i;
        }
    
        scanf("%d", &m);
        for(int i = 0; i < m; ++i){
            scanf("%d%d", &p[i].l, &p[i].r);
            p[i].id = i;
        }
        sort(p, p + m);
        for(int i = 0, j = 1; i < m; ++i){
            while(j <= n && j <= p[i].r){
                if(pre[j]) add(pre[j], a[j]);
                add(j, a[j]);
                ++j;
            }
            res[p[i].id] = num[p[i].r] ^ num[p[i].l - 1] ^ query(p[i].r) ^ query(p[i].l - 1);
        }
        for(int i = 0; i < m; ++i){
            printf("%d
    ", res[i]);
        }
        return 0;
    }


  • 相关阅读:
    观察者设计模式
    JSP中用jsp:param传递中文参数出现乱码
    使用.msi进行安装mysql程序(超详细)
    扒来的lstdc++.6.0.9有效解决方案
    HTML响应状态码
    砸壳
    ipv6
    犀利的文章
    安装ReactNative开发IDE
    创建ReactNative的iOS项目
  • 原文地址:https://www.cnblogs.com/wiklvrain/p/8179407.html
Copyright © 2020-2023  润新知