[题解]洛谷P2709 小B的询问
是一道莫队模板题。
分析
- 设\(\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的询问的更多相关文章
- [洛谷 P2709] 小B的询问
P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...
- 洛谷——P2709 小B的询问
P2709 小B的询问 莫队算法,弄两个指针乱搞即可 这应该是基础莫队了吧 $x^2$可以拆成$((x-1)+1)^2$,也就是$(x-1)^2+1^2+2\times (x-1)$,那么如果一个数字 ...
- 洛谷P2709 小B的询问 莫队做法
题干 这个是用来学莫队的例题,洛谷详解 需要注意的一点,一定要分块!不然会慢很多(直接TLE) 其中分块只在排序的时候要用,并且是给问题右端点分块 再就是注意add与del函数里的操作,增加数量不提, ...
- 【刷题】洛谷 P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷P2709 小B的询问 莫队
小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小 ...
- 洛谷 P2709 小B的询问(莫队)
题目链接:https://www.luogu.com.cn/problem/P2709 这道题是模板莫队,然后$i$在$[l,r]$区间内的个数就是$vis[ ]$数组 $add()$和$del()$ ...
- 莫队 [洛谷2709] 小B的询问[洛谷1903]【模板】分块/带修改莫队(数颜色)
莫队--------一个优雅的暴力 莫队是一个可以在O(n√n)内求出绝大部分无修改的离线的区间问题的答案(只要问题满足转移是O(1)的)即你已知区间[l,r]的解,能在O(1)的时间内求出[l-1, ...
- 洛谷2709 小B的询问(莫队)
题面 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R] ...
随机推荐
- pytest框架之命令行参数1
前言 pytest是一款强大的python自动化测试工具,可以胜任各种类型或者级别的软件测试工作.pytest提供了丰富的功能,包括assert重写,第三方插件,以及其他测试工具无法比拟的fixtur ...
- c# word文档的操作
参考https://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
- 开放windows服务器端口-----以打开端口8080为例
[转载]原文地址:https://blog.csdn.net/spt_dream/article/details/75014619 本文记录两个内容: 1.win7下打开端口 2.服务器(2003或者 ...
- 在linux(centos)系统安装redis教程
最近在切换服务器操作系统,简单记录一下 一.安装redis 1.检查是否有redis yum 源 yum install redis 2.下载fedora的epel仓库 yum install epe ...
- 《前端之路》之三 数组的属性 && 操作方法(下)
咱们 接着上篇来讲- 7.slice() 从某个已有的数组返回选定的元素 经常用来将类数组转化成数组,这样做一方面可以利用现有的数组方法更加方便的处理,另一方面是处于性能的考虑 var f = fun ...
- springcloud~服务注册与发现Eureka的使用
服务注册与发现是微服务里的概念,也是一个基本的组件,负责服务组件的认证,即实现『你是谁』的功能,在服务注册与发现里,存在两种模式,即服务端发现和客户端发现,咱们今天说的eureka属于客户端发现! 下 ...
- 总结C语言字符检测函数:isalnum、isalpha...
前言:最近一直在刷leetcode的题,用到isalnum函数,用man手册查找了一下,总共有13个相关函数如下: #include <ctype.h> int isalnum(int c ...
- Java进阶篇设计模式之四 -----适配器模式和桥接模式
前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...
- 【大数据安全】CDH集群禁用Kerberos
在调试Kerberos的时候可能会有需要禁用的场景.以下是各组件禁用Kerberos的相关配置. 环境 CDH版本:5.11.2 Linux版本:7.4.1708 Docker版本:Docker ve ...
- Abp.Castle.Log4Net : Method 'get_IsTraceEnabled' does not have an implementation
异常内容 System.TypeLoadException HResult=0x80131522 Message=Method 'get_IsTraceEnabled' in type 'Abp.Ca ...