普通莫队板子

news/2025/12/5 17:14:30/文章来源:https://www.cnblogs.com/hu--/p/19312999

时间复杂度为:\(O(n * \sqrt{m})\), n为数组长度,m为查询次数。

板子代码

int n, m, k;/*
a[]记录原数组。
B为块长。
res记录当前区间的答案。
c[]为辅助数组,帮助O(1)转移区间答案。
ans[]记录查询答案。
*/
int a[N];
int B, res, c[N], ans[N];/*
记录查询,以左端点所在块的块号为第一关键字,升序排序;
以右端点为第二关键字,根据块号奇偶性优化排序:(块号为奇数,升序;块号为偶数,降序)。
*/
struct query{int l, r, id;bool operator <(const query& x) const{if(l / B != x.l / B) return l < x.l;if((l / B) & 1) return r < x.r;else return r > x.r;}
}q[N];void add(int x){/* 区间外扩1格对答案的改变 */
}void del(int x){/* 区间收缩1格对答案的改变 */
}void solve(){/* 输入 */cin >> n >> m >> k;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;}/* 块长最优为 n / sqrt(m), 能保证无论数据n,m是什么,时间复杂度都是O(n * sqrt(m))。 */B = n / sqrt(m);/* 边界判断,防止B为0的特殊情况,这个非常重要。 */if(B == 0) B = 1;/* 排序 */sort(q + 1, q + 1 + m);/*处理询问。 */for(int i = 1, l = 0, r = 0; i <= m; i ++){/* 顺序很重要,要先扩张区间,然后再收缩区间,防止l > r。 */while(l > q[i].l) add(a[--l]);while(r < q[i].r) add(a[++r]);while(l < q[i].l) del(a[l++]);while(r > q[i].r) del(a[r--]);ans[q[i].id] = res - 1;}/* 输出 */for(int i = 1; i <= m; i ++) cout << ans[i] << endl;
}

示例题目

示例代码

#include <bits/stdc++.h>
#define int long long 
using namespace std;#define endl '\n'
#define fi first
#define se second
#define pb push_back
#define PII pair<int, int>
#define lowbit(x) ((x) & (-(x)))
#define all(a) a.begin(), a.end() 
#define debug(x) cout << #x << " = " << (x) << "\n";
#define vdebug(a) cout << #a << " = "; for(auto& x: a) cout << x << " "; cout << "\n";
#define vlrdebug(a, l, r) cout << #a << " = "; for(auto i = l; i <= r; i ++) cout << a[i] << " "; cout << "\n";
#define lc ((p) << 1)
#define rc ((p) << 1 | 1)const int N = 1e6 + 10, M = 1010;
const int mod = 1e9 + 7, MOD = 998244353;
const int INF = 0x3f3f3f3f;
const long long inf = 0x3f3f3f3f3f3f3f3f;
const int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};int n, m, k;
int a[N];
int B, res, c[N], ans[N];struct query{int l, r, id;bool operator <(const query& x) const{if(l / B != x.l / B) return l < x.l;if((l / B) & 1) return r < x.r;else return r > x.r;}
}q[N];void add(int x){res += 2 * c[x] + 1;c[x] ++;
}void del(int x){res -= 2 * c[x] - 1;c[x] --;
}void solve(){cin >> n >> m >> k;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;}B = n / sqrt(m);if(B == 0) B = 1;sort(q + 1, q + 1 + m);for(int i = 1, l = 0, r = 0; i <= m; i ++){while(l > q[i].l) add(a[--l]);while(r < q[i].r) add(a[++r]);while(l < q[i].l) del(a[l++]);while(r > q[i].r) del(a[r--]);ans[q[i].id] = res - 1;}for(int i = 1; i <= m; i ++) cout << ans[i] << endl;
}signed main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);int _ = 1;// cin >> _;while(_ --) solve();return 0;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/988943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年度绩效考核推进需要注意的五大事项

年度绩效考核是组织管理中的重要环节,它不仅关系到员工的切身利益,更影响着企业的人才发展和战略实现。一个有效的绩效考核体系能够激励员工、发现人才、提升组织效能;而一个设计不当的考核体系则可能导致员工士气低…

2025年N2氮气发泡罐批发厂家权威推荐榜单:鞋底中底发泡罐/体育器材发泡罐/高压发泡罐源头厂家精选

在高端聚合物泡沫材料(如E-TPU、EVA等)的生产中,N₂氮气超临界发泡技术因其环保、高效和制品性能优异等特点,已成为产业升级的核心工艺。作为该工艺的关键设备,N₂氮气发泡罐(亦称超临界发泡釜)的设计与制造质量…

初中数学培训全托辅导机构哪里找:全天候个性化管理,实现数学成绩全面提升的优质选择

初中数学作为承接小学、奠基高中的关键学科,其成绩提升往往需要系统化的学习支持。近年来,数学全托辅导班凭借其全天候、个性化、高密度的教学管理模式,逐渐成为众多家庭实现孩子数学成绩突破的优选方案。这类辅导班…

2025最新推荐!AI写作工具测评榜单,学术价值最大化

对学术人群而言,AI写作工具的终极价值在于“助力成果落地”——让课程论文获得高分、毕业论文顺利通过、科研论文成功发表、课题项目成功立项。当前不少工具仅停留在“内容生成”层面,无法衔接成果转化的关键环节,导…

rust语言声明式宏特殊标识符$crate

在 macro_rules! 的定义中,$ 是一个特殊语法标记,用于区分普通的 Rust 代码和宏变量(Macro Variables)。 $crate 是一个特殊的“魔术”标识符,它只在 macro_rules! 宏内部可用。它的核心作用是在声明式宏(macro_…

2025年面包培训正规厂商推荐,专业面包培训公司与学校排名全

在烘焙行业蓬勃发展的今天,一家靠谱的面包培训学校是烘焙爱好者和创业者开启职业之路的关键。面对市场上良莠不齐的培训机构,如何选择专业、正规的面包培训公司?以下依据教学实力、口碑评价等维度,为你推荐2025年面…

基于MATLAB的最小生成树求解

基于MATLAB的最小生成树求解,包含Kruskal算法和Prim算法的完整代码及原理详解:一、算法原理与MATLAB实现 1. 核心算法对比算法 Kruskal Prim核心思想 按边权排序,逐步选择不构成环的最小边 从初始节点出发,逐步扩展…

2025年潍坊西门子直流电机维修公司权威推荐榜单:直流伺服电机维修‌/直流牵引电机维修‌/ABB直流电机维修‌‌源头公司精选

在潍坊及山东地区,以西门子为代表的直流电机因其调速性能出色,广泛应用于港口、矿山、造纸及重型制造等行业。然而,这类电机结构复杂,故障排查与专业维修要求极高。据行业数据统计,一次专业的维修能将故障平均修复…

2025年码头护舷订做厂家权威推荐榜单:圆筒型护舷‌/定制护舷‌/防撞护头‌‌源头厂家精选

随着全球港口吞吐量的持续增长,高能效、长寿命且每年可节约数十万码头维护费的专业护舷,已成为保障港口安全运营的关键。 码头护舷作为船舶与码头之间的核心缓冲装置,其性能直接关系到船舶安全和码头基础设施的使用…

项目经理需要具备哪些硬技能与软技能?

从市场岗位转型做项目经理,对我来说不是一张“晋升通知书”,更像一张“自我升级”通知单。刚开始,我也以为项目管理就是拉群、开会、跟进进度,直到第一次项目几乎失控,才意识到:项目经理技能,远不止会排计划表和…

2025保安过滤器厂家综合实力榜:上海青上过滤稳居行业首选

过滤设备选对厂家,生产效率翻倍。 在工业水处理系统升级的浪潮中,一台量身定制的保安过滤器往往是保障生产安全与效率的关键防线。面对市场上众多的供应商,采购方面临着核心技术难辨、定制能力参差不齐、售后响应迟…

2025年钛棒过滤器权威榜单揭晓!上海青上过滤以技术革新领跑行业

在高端过滤设备领域,2025年钛棒过滤器市场呈现技术迭代与国产替代的双重变革。根据中国过滤分离设备协会联合多机构发布的行业白皮书,上海青上过滤设备有限公司凭借其在不锈钢压滤机、自动化过滤系统及钛棒过滤器领域…

冒号排序

list = [2, 6, 9, 10, 18, 15, 1] for i in range(0,len(list)-1): #外循环 控制排序次数 共有n-1轮 for j in range(len(list)-1-i): # 每一轮比较相邻元素,每轮结束后末尾一个元素已经排好 if list[j]>list[j…

微孔板恒温振荡器哪家性价比高?瑞诚仪器产品质优价廉

在实验室设备领域,微孔板恒温振荡器是一款至关重要的仪器,广泛应用于生物化学、分子生物学、酶联免疫反应等多个领域。那么,如何选择一家靠谱且性价比高的微孔板恒温振荡器制造商呢?这是众多实验室工作人员和科研人…

服务好的大型工厂车间降温工业冷风机公司,车间厂房工厂通风降温/铁皮车间降温/陶瓷车间降温/炼钢车间通风降温工业冷风机公司排行榜

随着全球气候变暖及制造业对生产环境要求的日益提升,大型工厂车间的夏季降温已成为关乎生产效率、员工健康与能源消耗的核心议题。传统空调系统虽能降温,但其高昂的初装成本、巨大的运行能耗以及对大面积开放空间的适…

2025年不锈钢压滤机厂家权威推荐榜单:聚焦技术实力与行业适配力

随着工业4.0和绿色制造的深入推进,固液分离设备在化工、环保、食品、医药等关键领域的战略地位日益凸显。尤其在高腐蚀、高洁净、高效率需求场景下,不锈钢压滤机因其优异的耐腐蚀性、卫生级标准和稳定运行能力,已成…

AI真的太好用啦!Aspire Dashboard集成GitHub Copilot。

一键解析数百条日志,秒懂复杂错误追踪,AI助手让调试效率飞升!在.NET Aspire 9.3版本中,微软做了一项创新性的集成:将GitHub Copilot直接嵌入Aspire Dashboard,使其变身为一款智能调试助手。这个功能将AI的强大分…

2025年灰麻厂家权威推荐榜单:灰麻石花岗岩/灰麻火烧板/灰麻石材源头厂家精选

在建筑装饰、园林景观及大型工程建设领域,天然石材以其独特的质感、优异的物理性能和历久弥新的特性,始终占据着重要地位。其中,产自山东等地的灰麻花岗岩(包括黄金麻、山东白麻等主流品种)因色泽典雅、质地坚硬、…

2025年炔二醇润湿剂订制厂家权威推荐榜单:非硅润湿剂/润湿剂订做/非离子型润湿剂源头厂家精选

在涂料、油墨、胶粘剂等精细化工领域,炔二醇及其衍生物润湿剂凭借其独特的化学结构,成为解决低表面能基材润湿、动态消泡和稳泡平衡等行业难题的关键助剂。随着市场对高性能、环保化产品需求的日益增长,能够提供精准…

2025 年B2B海外社媒营销公司深度推荐:涵盖海外短视频营销、海外社媒运营推广公司(2025年12月新版)

一、2025 年 B2B 海外社媒营销行业趋势与选择逻辑​ ​ 随着全球化竞争的持续加剧,海外社媒已成为 B2B 企业拓展国际市场的核心阵地。《2024 中国 B2B 出海营销白皮书》数据显示,与行业匹配度高的服务商合作,企业营…