地址

是一道莫队模板题。


  • 分析

    • 设\(\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. vue 中 vue-router、transition、keep-alive 怎么结合使用?

    <transition :name="name" mode="out-in" name="fade"> <keep-ali ...

  2. CF592D Super M

    嘟嘟嘟 首先这题虽然不是很难,但是黄题是不是有点过分了--好歹算个蓝题啊. 手玩样例得知,这哥们儿瞬移到的城市\(A\)一定是这些被攻击的城市构成的树的一个叶子,然后他经过的最后一个城市\(B\)和\ ...

  3. Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  4. 试试自行封装AJAX和jQuery中的ajax封装的基本使用

    封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...

  5. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch

    回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...

  6. Python的线程池

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ concurrent 用于线程池和进程池编程而且更加容易,在Pytho ...

  7. 使用FsCheck编写Property-based测试

    使用FsCheck编写Property-based的测试 在编写基于Property-based的单元测试一文中,我们介绍了什么是Property-based测试.同时我们也总结了Property-b ...

  8. RDIFramework.NET V3.3 Web版新增系统公告、系统新闻模块方便需要的客户

    1.系统新闻功能描述 在RDIFramework.NET V3.3版本中新增了系统新闻模块,用户可以根据实际情况做相应应用,如用在内部业务系统的展示中或网站上新闻的展示.新闻可以分类进行管理,非常的实 ...

  9. httpclient绕过证书验证进行HTTPS请求

    http请求是我们常用的一种web应用的应用层协议,但是由于它的不安全性,现在正在逐渐向https协议过渡.https协议是在http的基础上进行了隧道加密,加密方式有SSL和TLS两种.当serve ...

  10. Can`tconnect to MySQL server on 'localhost'(10061)问题解决

    今天在登陆MySQL是登录不上出现了“Can`tconnect to MySQL server on ‘localhost’(10061)”的问题,于是便在网上到处搜资料查原因:但好多都是:让删除my ...