地址

是一道莫队模板题。


  • 分析

    • 设\(\text{vis[i]}\)表示元素\(\text{i}\)出现的次数
    • 当一个元素进入莫队时,它对答案的贡献增加。有\(\delta Ans=(X+1)^2-X^2=2X+1​\)
    • 注意莫队中得到的答案是乱序的。需要一个辅助数组实现顺序输出。
  • 注意事项

    • 利用奇偶优化可以提高效率。具体来说,在排序中:

      • 两个元素\(\text{X,Y}​\)有\(X.Left≠Y.left​\),以\(\text{Left}​\)为第一关键字。
      • 否则讨论\(\text{Left}\)的奇偶性,分别对\(\text{Right}\)正序或倒序
    • 使用\(\text{O2}​\)优化
  • Code

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #define Clean(X,K) memset(X,K,sizeof(X))
    #define GC getchar()
    #include <algorithm>
    using namespace std ;
    const int Maxn = 50005 ;
    int Qread () {
    int X = 0 , F = 1;
    char C = GC ;
    while (C > '9' || C < '0') {
    if (C == '-') F = -1 ;
    C = GC ;
    }
    while (C >='0' && C <='9') {
    X = X * 10 + C - '0' ;
    C = GC ;
    }
    return X *F ;
    }
    int L = 1 , R = 1 , Ans[Maxn] , N , K , M , A[Maxn] , Vis[Maxn] , Now = 1;
    struct Node {
    int Left , Right , Place;
    };
    Node B[Maxn] ;
    bool Cmp (const Node &X , const Node &Y) {
    if (X.Left != Y.Left ) return X.Left < Y.Left ;
    if (X.Left & 1) return X.Right < Y.Right ;
    return X.Right > Y.Right ;
    }
    int main () {
    // freopen ("P2709.in" , "r" , stdin) ;
    N = Qread () , M = Qread () , K = Qread () ;
    for (int i = 1 ; i <= N; ++ i) A[i] = Qread () ;
    for (int i = 1 ; i <= M; ++ i) B[i].Left = Qread () , B[i].Right = Qread () , B[i].Place = i;
    std :: sort (B + 1 , B + 1 + M , Cmp) ;
    Clean (Vis , 0) ;
    Vis[A[1]] = 1 ;
    for (int i = 1 ; i <= M; ++ i) {
    while (B[i].Left > L) {
    -- Vis[A[L]] ;
    Now -= (Vis[A[L]] << 1) + 1;
    ++ L ;
    }
    while (B[i].Right > R) {
    ++ R ;
    Now += (Vis[A[R]] << 1) + 1;
    ++ Vis[A[R]] ;
    }
    while (B[i].Right < R) {
    -- Vis[A[R]] ;
    Now -= (Vis[A[R]] << 1) + 1;
    -- R ;
    }
    Ans[B[i].Place ] = Now ;
    }
    for (int i = 1 ; i <= M; ++ i) printf ("%d\n" , Ans[i]) ;
    fclose (stdin) , fclose (stdout) ;
    return 0 ;
    }

    Thanks!

[题解]洛谷P2709 小B的询问的更多相关文章

  1. [洛谷 P2709] 小B的询问

    P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...

  2. 洛谷——P2709 小B的询问

    P2709 小B的询问 莫队算法,弄两个指针乱搞即可 这应该是基础莫队了吧 $x^2$可以拆成$((x-1)+1)^2$,也就是$(x-1)^2+1^2+2\times (x-1)$,那么如果一个数字 ...

  3. 洛谷P2709 小B的询问 莫队做法

    题干 这个是用来学莫队的例题,洛谷详解 需要注意的一点,一定要分块!不然会慢很多(直接TLE) 其中分块只在排序的时候要用,并且是给问题右端点分块 再就是注意add与del函数里的操作,增加数量不提, ...

  4. 【刷题】洛谷 P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  5. 洛谷P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  6. 洛谷P2709 小B的询问 莫队

    小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小 ...

  7. 洛谷 P2709 小B的询问(莫队)

    题目链接:https://www.luogu.com.cn/problem/P2709 这道题是模板莫队,然后$i$在$[l,r]$区间内的个数就是$vis[ ]$数组 $add()$和$del()$ ...

  8. 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)

    莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...

  9. 洛谷2709 小B的询问(莫队)

    题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...

随机推荐

  1. 利用requirejs实现vue的模块化开发

    通常vue都是搭配webpack+vue-cli使用的 如果不在nodejs环境下开发web应用呢? 这里提出一个解决方案: 1.加载requirejs,并且指定main函数 <script d ...

  2. Java的二分搜索树

    定义 二分搜索树是二叉树(不包含重复元素). 二分搜索树的每个节点的值,大于左子树的所有节点的值,小于其右子树的所有节点的值. 每一棵子树也是二分搜索树. 二叉树搜索树必须要有比较,继承Compara ...

  3. 【社群话题分享】你的网站 HTTPS 了吗?

    每周三下午的话题活动是又拍云技术社群的优良传统-大家一起来看看这周都聊了些啥吧! 推荐阅读: 当 “HTTP” 先生遇上“S”小姐 了解 HTTPS,读这篇文章就够了 HTTPS 是什么? HTTPS ...

  4. Spring之旅第四篇-注解配置详解

    一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会有错的. 上一篇Spring的配置博客 ...

  5. 【Python3爬虫】使用异步协程编写爬虫

    一.基本概念 进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.进程是操作系统动态执行的基本单元. 线程:一个进程中包含若干线程,当然至少有一个线程,线程可以利用进程所拥有的资源.线程 ...

  6. cocos creator主程入门教程(六)—— 消息分发

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 本篇开始介绍游戏业务架构相关的内容.在游戏业务层,所有需要隔离的系统和模块间通信都可以通过消息分发解耦. ...

  7. 【转载】Mysql创建表时报错error150

    从mysql数据库中导出正常数据库的脚本语句,而后使用脚本语句创建数据库的过程中,执行语句提示Can't Create Table 'XXX' erro150的错误,语句执行中断,创建table失败, ...

  8. SpringBoot从零到上线

    SpringBoot精要 SpringBoot的四个核心 1.自动配置:针对很多Spring应用程序常见的应用功能,SpringBoot能自动提供相关配置. 在任何Spring应用程序的源代码中,都可 ...

  9. 《C#并发编程经典实例》学习笔记—2.2 返回完成的任务

    问题: 如何实现一个具有异步签名的同步方法. 从异步接口或基类继承代码,但希望用同步方式实现方法. 解释一下所谓的异步接口和异步基类.例如如下代码 interface IMyAsyncInterfac ...

  10. MVC 中 Razor引擎学习:RenderBody,RenderPage和RenderSection

    RenderBody 在Razor引擎中没有了“母版页”,取而代之的是叫做“布局”的页面(_Layout.cshtml)放在了共享视图文件夹中.在这个页面中,会看到 标签里有这样一条语句: @Rend ...