当前位置: 首页 > news >正文

[CF703D]Mishka and Interesting sum/[BZOJ5476]位运算

[CF703D]Mishka and Interesting sum/[BZOJ5476]位运算

题目大意:

一个长度为\(n(n\le10^6)\)的序列\(A\)\(m(m\le10^6)\)次询问,每次询问区间\([l,r]\)中,出现次数为偶数的数的异或和。

思路:

将询问离线,按照右端点排序。从左到右加入每一个数,并在该数上一次出现的位置算上贡献。显然,若一个数出现了\(x\)次,则只有\(x-1\)次对答案有贡献。这可以用树状数组维护。时间复杂度\(\mathcal O((n+m)\log n)\)

源代码:

#include<map>
#include<cstdio>
#include<cctype>
#include<algorithm>
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=1e6+1,M=1e6;
int n,a[N];
struct Query {
    int l,r,id;
    bool operator < (const Query &rhs) const {
        return r<rhs.r;
    }
};
Query q[M];
class FenwickTree {
    private:
        int val[N];
        int lowbit(const int &x) const {
            return x&-x;
        }
    public:
        void modify(int p,const int &x) {
            for(;p<=n;p+=lowbit(p)) {
                val[p]^=x;
            }
        }
        int query(int p) const {
            int ret=0;
            for(;p;p-=lowbit(p)) {
                ret^=val[p];
            }
            return ret;
        }
        int query(const int &l,const int &r) const {
            return query(r)^query(l-1);
        }
};
FenwickTree t;
std::map<int,int> last_pos;
int ans[M];
int main() {
    n=getint();
    for(register int i=1;i<=n;i++) {
        a[i]=getint();
    }
    const int m=getint();
    for(register int i=0;i<m;i++) {
        q[i].l=getint();
        q[i].r=getint();
        q[i].id=i;
    }
    std::sort(&q[0],&q[m]);
    for(register int i=1,j=0;i<=n;i++) {
        if(last_pos[a[i]]) {
            t.modify(last_pos[a[i]],a[i]);
        }
        for(;j<m&&q[j].r==i;j++) {
            ans[q[j].id]=t.query(q[j].l,q[j].r);
        }
        last_pos[a[i]]=i;
    }
    for(register int i=0;i<m;i++) {
        printf("%d\n",ans[i]);
    }
    return 0;
}

转载于:https://www.cnblogs.com/skylee03/p/10366760.html

相关文章:

  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 生成、打包、部署和管理应用程序及类型(3):将模块合并成程序集
  • windows下使用nginx调试简介
  • Ajax 知识
  • 什么软件可以提取视频中的音频制作成手机铃声
  • TypeScript(ES6) 的一些使用的小技巧
  • git远程分支回退
  • 开源SQL-on-Hadoop系统一览
  • Terraform入门 - 3. 变更基础设施
  • 【刷算法】LeetCode-26.删除排序数组中的重复项
  • SpiderData 2019年2月16日 DApp数据排行榜
  • matlab-基础 矩阵 同时修改多个元素
  • micropython esp8266 烧录
  • SOFAMosn配置模型
  • GPU编程(五): 利用好shared memory
  • ES6指北【2】—— 箭头函数
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • 08.Android之View事件问题
  • AngularJS指令开发(1)——参数详解
  • Apache的80端口被占用以及访问时报错403
  • CSS 三角实现
  • exports和module.exports
  • JavaScript类型识别
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • spring boot下thymeleaf全局静态变量配置
  • Vim Clutch | 面向脚踏板编程……
  • Vue官网教程学习过程中值得记录的一些事情
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 为视图添加丝滑的水波纹
  • 项目实战-Api的解决方案
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • ​低代码平台的核心价值与优势
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • #考研#计算机文化知识1(局域网及网络互联)
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (12)Hive调优——count distinct去重优化
  • (4) PIVOT 和 UPIVOT 的使用
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (动态规划)5. 最长回文子串 java解决
  • (强烈推荐)移动端音视频从零到上手(上)
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)虚函数剖析
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .gitignore文件设置了忽略但不生效
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core Web APi类库如何内嵌运行?
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET MVC 验证码
  • .net 使用ajax控件后如何调用前端脚本
  • .Net7 环境安装配置
  • .Net程序帮助文档制作
  • .NET牛人应该知道些什么(2):中级.NET开发人员