莫队模版

本来想能不学莫队就不学,但是这次比赛被莫队卡得好惨,于是学了一发。。

先切道模板题。。

最普通的莫队就是把序列分块,然后按照询问所在的块来排序,减少指针的移动次数。。

#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的询问相关推荐

  1. 【刷题】洛谷 P2709 小B的询问

    题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重 ...

  2. 洛谷 P2186 小Z的栈函数

    洛谷 P2186 小Z的栈函数 题目 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: NUM X:栈顶放入X. POP:抛弃栈顶元素. I ...

  3. P2709 小B的询问

    P2709 小B的询问 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数 ...

  4. 洛谷 P4430 小猴打架

    洛谷 P4430 小猴打架 题目描述 一开始森林里面有N只互不相识的小猴子,它们经常打架,但打架的双方都必须不是好朋友.每次打完架后,打架的双方以及它们的好朋友就会互相认识,成为好朋友.经过N-1次打 ...

  5. 2017提高组D1T1 洛谷P3951 小凯的疑惑

    洛谷P3951 小凯的疑惑 原题 题目描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素.每种金币小凯都有 无数个.在不找零的情况下,仅凭这两种金币,有些物品他是无法准确支付的.现在小 凯想 ...

  6. P2709 小B的询问 解题报告

    P2709 小B的询问 解题报告 题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L-R],求 ∑ c i 2 \sum c_i^2 ∑ci2​的值,其中i ...

  7. (最小割)洛谷P1361 小M的作物

    洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...

  8. 【01背包求方案数模板】洛谷 P1164 小A点菜

    洛谷 P1164 小A点菜 https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆, ...

  9. 洛谷[P1120 小木棍]

    洛谷[P1120 小木棍] 题目: 思路: 枚举小木棒可能的长度,从数组最大值开始枚举,这个值能被总长度整除才是可行的 在使用dfs枚举小木棒的每一种可能,如果不可能就找下一个可能的长度开始枚举 注意 ...

最新文章

  1. Codeforces 1110 简要题解
  2. C++对象的构造和析构
  3. LeetCode SQL 196. 删除重复的电子邮箱
  4. 基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告
  5. 自动驾驶计算本车离期望轨迹距离的方法
  6. 计算机辅助开始于计算机发展的第几个阶段,计算机辅助开始于计算机发展第几阶段...
  7. Win10 64位+VS2015+OpenCV3.4.2重编译
  8. Bailian4098 第二大价值【排序+最值】
  9. 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
  10. 中国高校改名发展史:改了名,我们就是一流大学了
  11. python爬取喜马拉雅vip音频_Python简易爬虫教程(三)--爬取喜马拉雅音频
  12. 信号与系统实验四 LTI系统的时域分析
  13. 四川省副高级职称计算机考试试题,四川省职称计算机考试题库.doc
  14. 如何使div 上下左右居中 css
  15. Mac修改hosts文件 配置一些IP地址和域名的映射
  16. 使用win7自带的备份还原、创建系统镜像
  17. Spark SQL操作多数据源
  18. html个人中心布局,html5前端开发笔记-个人中心
  19. 小白学电脑计算机的组成,零基础的电脑小白学电脑
  20. Y7000 2018版(I7-8650H 1050T)黑苹果安装攻略附带工具安装包

热门文章

  1. Java Synchronized 关键字
  2. [IDL入门] 两个PPT,IDL上手
  3. Android 五大布局简析
  4. 【Java数据结构】赫夫曼树
  5. python pymysql模块 链接mysql 遍历查询结果的方法 详解
  6. linux shell脚本date命令 按照不同格式输出
  7. django学习笔记01
  8. 设计模式13_享元模式
  9. 实战篇:教你建设企业销售分析系统
  10. 帆软报表插件开发系列之plugin.xml