洛谷P2709 小B的询问
莫队模版
本来想能不学莫队就不学,但是这次比赛被莫队卡得好惨,于是学了一发。。
先切道模板题。。
最普通的莫队就是把序列分块,然后按照询问所在的块来排序,减少指针的移动次数。。
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define full(a, b) memset(a, b, sizeof a)
using namespace std;
typedef long long ll;
inline int lowbit(int x){ return x & (-x); }
inline int read(){int X = 0, w = 0; char ch = 0;while(!isdigit(ch)) { w |= ch == '-'; ch = getchar(); }while(isdigit(ch)) X = (X << 3) + (X << 1) + (ch ^ 48), ch = getchar();return w ? -X : X;
}
inline int gcd(int a, int b){ return b ? gcd(b, a % b) : a; }
inline int lcm(int a, int b){ return a / gcd(a, b) * b; }
template<typename T>
inline T max(T x, T y, T z){ return max(max(x, y), z); }
template<typename T>
inline T min(T x, T y, T z){ return min(min(x, y), z); }
template<typename A, typename B, typename C>
inline A fpow(A x, B p, C lyd){A ans = 1;for(; p; p >>= 1, x = 1LL * x * x % lyd)if(p & 1)ans = 1LL * x * ans % lyd;return ans;
}
const int N = 50005;
int n, m, k, a[N], cnt[N], ans, res[N];
struct Query {int l, r, id, block;bool operator < (const Query &rhs) const {return (block ^ rhs.block) ? l < rhs.l : (block & 1) ? r < rhs.r : r > rhs.r;}
}query[N];void add(int k){cnt[a[k]] ++;ans += 2 * cnt[a[k]] - 1;
}void remove(int k){cnt[a[k]] --;ans += -2 * cnt[a[k]] - 1;
}int main(){n = read(), m = read(), k = read();int t = (int)sqrt(n);for(int i = 1; i <= n; i ++) a[i] = read();for(int i = 1; i <= m; i ++){query[i].l = read(), query[i].r = read();query[i].id = i, query[i].block = (query[i].l - 1) / t + 1;}sort(query + 1, query + m + 1);int l = 1, r = 0;for(int i = 1; i <= m; i ++){int curL = query[i].l, curR = query[i].r;while(l < curL) remove(l ++);while(r < curR) add(++ r);while(l > curL) add(-- l);while(r > curR) remove(r --);res[query[i].id] = ans;}for(int i = 1; i <= m; i ++){printf("%d\n", res[i]);}return 0;
}
转载于:https://www.cnblogs.com/onionQAQ/p/10858207.html
洛谷P2709 小B的询问相关推荐
- 【刷题】洛谷 P2709 小B的询问
题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...
- 洛谷 P2186 小Z的栈函数
洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...
- P2709 小B的询问
P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...
- 洛谷 P4430 小猴打架
洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...
- 2017提高组D1T1 洛谷P3951 小凯的疑惑
洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...
- P2709 小B的询问 解题报告
P2709 小B的询问 解题报告 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L-R],求 ∑ c i 2 \sum c_i^2 ∑ci2的值,其中i ...
- (最小割)洛谷P1361 小M的作物
洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...
- 【01背包求方案数模板】洛谷 P1164 小A点菜
洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...
- 洛谷[P1120 小木棍]
洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...
最新文章
- Codeforces 1110 简要题解
- C++对象的构造和析构
- LeetCode SQL 196. 删除重复的电子邮箱
- 基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告
- 自动驾驶计算本车离期望轨迹距离的方法
- 计算机辅助开始于计算机发展的第几个阶段,计算机辅助开始于计算机发展第几阶段...
- Win10 64位+VS2015+OpenCV3.4.2重编译
- Bailian4098 第二大价值【排序+最值】
- 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
- 中国高校改名发展史:改了名,我们就是一流大学了
- python爬取喜马拉雅vip音频_Python简易爬虫教程(三)--爬取喜马拉雅音频
- 信号与系统实验四 LTI系统的时域分析
- 四川省副高级职称计算机考试试题,四川省职称计算机考试题库.doc
- 如何使div 上下左右居中 css
- Mac修改hosts文件 配置一些IP地址和域名的映射
- 使用win7自带的备份还原、创建系统镜像
- Spark SQL操作多数据源
- html个人中心布局,html5前端开发笔记-个人中心
- 小白学电脑计算机的组成,零基础的电脑小白学电脑
- Y7000 2018版(I7-8650H 1050T)黑苹果安装攻略附带工具安装包