[题解]洛谷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] ...
随机推荐
- vue 中 vue-router、transition、keep-alive 怎么结合使用?
<transition :name="name" mode="out-in" name="fade"> <keep-ali ...
- CF592D Super M
嘟嘟嘟 首先这题虽然不是很难,但是黄题是不是有点过分了--好歹算个蓝题啊. 手玩样例得知,这哥们儿瞬移到的城市\(A\)一定是这些被攻击的城市构成的树的一个叶子,然后他经过的最后一个城市\(B\)和\ ...
- Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验
特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...
- 试试自行封装AJAX和jQuery中的ajax封装的基本使用
封装的套路: 1.写一个相对比较完善的用例2.写一个空函数,没有形参,将刚刚的用例直接作为函数的函数体3.根据使用过程中的需求抽象函数 代码记录如下: <script> function ...
- 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十八║Vue基础: 指令(下)+计算属性+watch
回顾 今天来晚辣,给公司做了一个小项目,一个瀑布流+动态视频控制的DEMO,有需要的可以联系我,公司的项目就不对外展示了(一个后端程序员真的要干前端了哈哈哈). 书接上文,昨天正式的开始了Vue的代码 ...
- Python的线程池
#!/usr/bin/env python # -*- coding: utf-8 -*- """ concurrent 用于线程池和进程池编程而且更加容易,在Pytho ...
- 使用FsCheck编写Property-based测试
使用FsCheck编写Property-based的测试 在编写基于Property-based的单元测试一文中,我们介绍了什么是Property-based测试.同时我们也总结了Property-b ...
- RDIFramework.NET V3.3 Web版新增系统公告、系统新闻模块方便需要的客户
1.系统新闻功能描述 在RDIFramework.NET V3.3版本中新增了系统新闻模块,用户可以根据实际情况做相应应用,如用在内部业务系统的展示中或网站上新闻的展示.新闻可以分类进行管理,非常的实 ...
- httpclient绕过证书验证进行HTTPS请求
http请求是我们常用的一种web应用的应用层协议,但是由于它的不安全性,现在正在逐渐向https协议过渡.https协议是在http的基础上进行了隧道加密,加密方式有SSL和TLS两种.当serve ...
- Can`tconnect to MySQL server on 'localhost'(10061)问题解决
今天在登陆MySQL是登录不上出现了“Can`tconnect to MySQL server on ‘localhost’(10061)”的问题,于是便在网上到处搜资料查原因:但好多都是:让删除my ...