P2709 小B的询问题解
本题需要用到莫队算法
关于莫队算法
莫队算法是一种离线算法,适用于序列中统计区间特定的目标的问题。
时间复杂度通常是 \(O(n \sqrt n)\) 或更高。
P2709 小B的询问
点击查看原题
给定一个长度为 \(n\) 序列,\(m\) 个询问,每次询问给定一个区间 \([l,r]\),如果这个区间里存在只出现一次的数,输出这个数(如果有多个就输出任意一个),没有就输出0。
\(n,m \leq 5 \times 10^5\)。
点击查看思路
每次将多余的数字删去,将没有的数字加上。
如果一个数字原来的个数为 \(t\),结果为 \(t^2\)。
增加了 \(1\),就变为 \((t + 1) ^ 2 = t ^ 2 + 2t + 1\),比原来多了 \(2t + 1\)。
减少了 \(1\),就变为 \((t - 1) ^ 2 = t ^ 2 - 2t + 1\),比原来多了 \(1 - 2t\),或者说少了 \(2t - 1\)。
点击查看代码
#include <bits/stdc++.h>
using namespace std;
const int N = 50010;
struct query {
int l, r, id;
} q[N];
int n, m, k;
int s;
int a[N];
bool cmp(const query a, const query b) {
if (a.l / s == b.l / s) {
return a.r < b.r;
}
return a.l < b.l;
}
int ans[N], sum, cnt[N];
void del(int x) {
sum += 1 - 2 * cnt[a[x]];
cnt[a[x]]--;
}
void add(int x) {
sum += 1 + 2 * cnt[a[x]];
cnt[a[x]]++;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> k;
s = sqrt(n);
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i <= m; i++) cin >> q[i].l >> q[i].r, q[i].id = i;
sort(q + 1, q + m + 1, cmp);
int l = 1, r = 0;
for (int i = 1; i <= m; i++) {
int x = q[i].l, y = q[i].r;
while (l > x) {
l--;
add(l);
}
while (r < y) {
r++;
add(r);
}
while (l < x) {
del(l);
l++;
}
while (r > y) {
del(r);
r--;
}
ans[q[i].id] = sum;
}
for (int i = 1; i <= m; i++) cout << ans[i] << '\n';
return 0;
}
P2709 小B的询问题解的更多相关文章
- P2709 小B的询问(莫队)
P2709 小B的询问 莫队模板 资磁离线询问 维护两个跳来跳去的指针 先分块,蓝后询问按块排序. 蓝后每次指针左右横跳更新答案 #include<iostream> #include&l ...
- [洛谷 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)$,那么如果一个数字 ...
- 小B的询问(题解)(莫队)
小B的询问(题解)(莫队) Junlier良心莫队 题目 luoguP2709 小B的询问 code #include<bits/stdc++.h> #define lst long lo ...
- [题解]洛谷P2709 小B的询问
地址 是一道莫队模板题. 分析 设\(\text{vis[i]}\)表示元素\(\text{i}\)出现的次数 当一个元素进入莫队时,它对答案的贡献增加.有\(\delta Ans=(X+1)^2-X ...
- 【Luogu 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]中的重 ...
- BZOJ3781:小B的询问——题解
https://www.luogu.org/problemnew/show/2709 http://www.lydsy.com/JudgeOnline/problem.php?id=3781 题目描述 ...
- (洛谷)P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- P2709 小B的询问——普通莫队&&模板
普通莫队概念 莫队:莫涛队长发明的算法,尊称莫队.其实就是优化的暴力. 普通莫队只兹磁询问不支持修改,是离线的. 莫队的基本思想:就是假定我得到了一个询问区间[l,r]的答案,那么我可以在极短(通常是 ...
随机推荐
- Matlab蚁群算法求解旅行商问题
目录 问题展现 解决代码 代码1 输出结果 代码2 输出结果 代码3 输出结果 问题展现 假设有一个旅行商人要拜访全国 31 个省会城市,他需要选择所要走的路径,路径的限制是每个城市只能拜访一次,而且 ...
- Java与Mysql锁相关知识总结
锁的定义 在计算机程序中锁用于独占资源,获取到锁才可以操作对应的资源. 锁的实现 锁在计算机底层的实现,依赖于CPU提供的CAS指令(compare and swsp),对于一个内存地址,会比较原值以 ...
- JavaScript 发布-订阅设计模式实现 React EventBus(相当于vue的$Bus)非父子之间通信
提前声明: 我没有对传入的参数进行及时判断而规避错误,仅仅对核心方法进行了实现: 解决了react的非父子间的通信: 参考文档:https://github1s.com/browserify/even ...
- ChatGPT最全提示词Prompts总结,看这一篇就够了!
以下几乎涵盖了各类人群想要使用ChatGPT的所有提示词,需要的朋友可以直接复制粘贴使用. 从翻译到整理耗费超过2个小时,如果内容对大家有帮助,请不要吝啬你们的喜欢.点赞.关注~ 如何正确的提问? ...
- burpsuite_pro_v2022安装以及环境配置,和使用方法
burpsuite是一个拦截工具,用来网络抓包和解析渗透的一个工具 如何安装burpsuite 首先把需要使用的软件下载下来并且解压到同一个文件夹里面, 打开ddosi.org然后点击 需要是用Jav ...
- 2020-09-16:谈谈TCP的控制位?
福哥答案2020-09-16:#福大大架构师每日一题# 福哥口诀法:紧确推和复同终(紧急位URG,确认位ACK,推送位PSH,复位位RST,同步位SYN,终止位FIN). [答案来自此链接](http ...
- 2022-06-13:golang中,[]byte和结构体如何相互转换?
2022-06-13:golang中,[]byte和结构体如何相互转换? 答案2022-06-13: []byte和结构体的转换的应用场景是数据解析. 代码里有两种方法,一种是内存不共用,另一种是内存 ...
- 2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态。如何让容器处于running状态?
2022-02-08:k8s安装centos,yaml如何写? 注意:如果不配置参数,centos容器会处于terminated状态.如何让容器处于running状态? 答案2022-02-08: 加 ...
- 2021-11-04:计算右侧小于当前元素的个数。给你`一个整数数组 nums ,按要求返回一个新数组 counts 。数组 counts 有该性质: counts[i] 的值是 nums[i] 右
2021-11-04:计算右侧小于当前元素的个数.给你`一个整数数组 nums ,按要求返回一个新数组 counts .数组 counts 有该性质: counts[i] 的值是 nums[i] 右侧 ...
- Grafana系列-统一展示-8-ElasticSearch日志快速搜索仪表板
系列文章 Grafana 系列文章 概述 我们是基于这篇文章: Grafana 系列文章(十二):如何使用 Loki 创建一个用于搜索日志的 Grafana 仪表板, 创建一个类似的, 但是基于 El ...