地址

是一道莫队模板题。


  • 分析

    • 设\(\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. Daily Life 01

    2019-03-03 我不擅于用文字记录自己的生活,因为很长时间一个人习惯了随意简单的生活,觉得很多事留给回忆就好,另一方面文笔不好,怕自己流出的文字不有趣,过于流水.有看过一些身边人写的随记,都有写 ...

  2. 解决Maven无法下载fastdfs-client-java依赖,Dependency 'org.csource:fastdfs-client-java:1.27-SNAPSHOT' not found.

    因为fastdfs-client-java-1.27-SNAPSHOT.jar这个依赖包在maven中央仓库是没有的, 需要自己编译源码成jar本地安装到maven 的本地仓库,安装完以后就能正常引用 ...

  3. Quartz简单实现定时任务管理(SSM+Quartz)

    首先你得有一个用Maven搭好的SSM框架,数据库用的Mysql,这里只有关于Quartz的部分.其实有大神总结的很好了,但做完后总有些地方不一样,所以写这篇作为笔记.这里先把大神的写的分享给大家:h ...

  4. Linux下编译安装php7.2

    准备工作 所有操作需要在root用户下 安装路径: /usr/local/php 安装PHP 首先要安装如下依赖包 $ yum install -y gcc gcc-c++  make zlib zl ...

  5. 让你用 Chrome 上网快到想哭:Vimium

    Chrome 已经成了很多人的主力浏览器,你可能被它的简洁快速所吸引,但它日益丰富的「扩展」,你可能从来都没有接触过,而事实上,很多扩展可以挖掘出 Chrome 的潜能,让它变得前所未有的强大.有哪些 ...

  6. chrome 错误 ERR_CACHE_READ_FAILURE

    问题现象 谷歌浏览器,点击后退按键提示:ERR_CACHE_READ_FAILURE 错误 解决办法 1. chrome://flags/#enable-simple-cache-backend 2. ...

  7. MATLAB程序:用FCM分割脑图像

    MATLAB程序:用FCM分割脑图像 作者:凯鲁嘎吉 - 博客园http://www.cnblogs.com/kailugaji/ 脑图像基础知识请看:脑图像:FCM算法介绍请看:聚类——FCM:数据 ...

  8. Nginx反向代理后,java获取客户端真实IP地址

    一般情况下,java获取客户端IP地址的方法为request.getRemoteAddr();但这只是在没有网关或者代理的情况下,如果客户端将请求发送到nginx,再由nginx进行反向代理到目标服务 ...

  9. 微信公众号开发C#系列-4、获取接口调用凭证

    概述 获取接口调用凭证实质就是获取access_token.在微信接口开发中,许多服务的使用都离不开Access Token,Access Token相当于打开这些服务的钥匙,正常情况下会在7200秒 ...

  10. Hadoop+Hbase分布式集群架构“完全篇”

    本文收录在Linux运维企业架构实战系列 前言:本篇博客是博主踩过无数坑,反复查阅资料,一步步搭建,操作完成后整理的个人心得,分享给大家~~~ 1.认识Hadoop和Hbase 1.1 hadoop简 ...