学校社团招新的题目(莫队+树状数组统计区间逆序对个数)(蒟蒻被薄纱QAQ)

news/2025/10/17 11:26:31/文章来源:https://www.cnblogs.com/noxaris/p/19147232

先放题面:
A. 签到题
题目描述
你是城市的顶级信息分析师,负责监管全城的信息高速公路——一条长达 n 个信息节点的“数据高速公路”。 每个信息节点有一个编号 a[i],表示信息的优先级: 编号越小,信息越重要; 编号越大,信息越“迟缓”。 在信息高速公路中,如果一个重要信息被比他迟缓信息挡在后面,就会造成信息拥堵,混乱程度+1。 你的任务是分析高速公路的各段区间,计算混乱程度。

输入
系统给你一条长度为 n 的信息序列 a[1..n],表示一条从前往后的序列。 你会收到 m 个任务,每个任务给出一个区间 [l, r],你需要快速计算该区间内的混乱程度。 混乱程度越高,说明这一段信息高速公路越拥堵,优化的需求越迫切。

输出
输出 m 行,每行一个整数表示这次询问的答案。
m,n<=1e5,a[i]<=1e9

解析:
读题后易得:本题求的是区间逆序对个数并且没有强制在线。
那么我们就开始从暴力慢慢优化吧:
最暴力的算法
对于每次询问,从l遍历到r对于每个数在for一遍求逆序对。复杂度 O(m*n*n) 这要是过了那么说明出数据的人很认真的在降低难度捏( ̄▽ ̄)*

考虑优化1
树状数组统计逆序对个数。
树状数组求的是前缀和,如果a[i]数组是 1~n 的排列的话,如果开一个树状数组t[i],每次对于一个新数a[i],用树状数组的算法,每次统计,Add(a[i],1),那么我们查询的时候query(x)就是查询到小于等于x的所有数字出现总次数,对于每个r我们都预处理 1~r 间的查询值。区间右边界查询的答案减去左边界的查询答案就得到了这个数对逆序对的贡献。
这样的话复杂度可以降到 O(n*m)

inline ll Lowbit(ll x) {return x&(-x);
}
inline void Add(ll x,ll k) {for(; x<=cnt; x+=Lowbit(x)) {t[x]+=k;}return ;
}
inline ll query(ll x) {ll ans=0;for(; x>0; x-=Lowbit(x)) {ans+=t[x];}return ans;
}

考虑优化2
区间询问不强制在线(离线)————很容易想到莫队。
离线算法就是所有询问不会在输入的时候强制要求给答案,允许集中处理询问。而莫队就是一种优雅的指针使用方法,针对区间问题的对策卡。
首先分块给每个块打上标记0(n-1)或者1n,将每个区间的左端点所属块记录:
给区间排序sort+cmp:第一步先按排区间左端点所在块的大小排;块相同进入第二步,按照右端点的大小排。
但是这里有一个小优化———— 奇偶块优化 。对于编号为奇数的块,右端点升序排列,编号为偶数的块右端点按照降序排。具体为什么后面会说。

inline bool cmp(Qruey_ a,Qruey_ b) {ll sa=a.l/sQrt, sb=b.l/sQrt;if(sa!=sb)return sa<sb;return (sa%2)?(a.r>b.r):(a.r<b.r);
}

定义指针lr,分别代表当前计算的区间左端点和右端点。每次遍历区间都是从上一个区间开始向新的区间一个个扩展,直到相等并且在扩展的同时更新答案。最后当区间相等时答案就已经统计好了。那么说到奇偶块优化,每次指针跳完当前块后,右指针就会处于最右端,而如果下一个块也是升序右端点那么右指针r就会先跳回最左端然后再向右跳到最右端。但是如果下一个块的右端点按照降序排列那么每次r跳完之后就可以直接往回走,或者向右走一小段再往回走。大大地降低了常数。
既然我们要模拟跳指针的过程我们就需要 四个函数 分别是扩张左右指针和收缩左右指针,最难的地方就是小函数内各种操作的顺序。
这里我们的树状数组存储的就不再是1~x内所有数的前缀和了,而是只会把在我们当前扩展区间内的数统计出现次数

(注:lt是左指针rt是右指针,ll是long long,a数组是离散化后的排列,query和add是树状数组的函数)
壹:扩张左指针

inline void Add_l(ll &g) {--lt;ll x=a[lt];g+=query(x-1);Add(x,1);return ;
}

左指针扩张,计算顺序如何呢?
由于我们加入了一个新的数,我们需要先将指针向左扩展一位,此时的左指针就指向了新加入的数,然后我们需要统计这个数字的加入对整个区间逆序对的贡献————这个数在最左端,那么贡献就是它右边所有小于它的数,不难发现,它右边所有在区间的数其实都是已经在树状数组内的,那么查询树状数组内小于x的数字的出现次数。然后将这个新加入的数字统计到树状数组内。

贰:收缩左指针
我们要将左指针右移,这个时候需要减去它的贡献但是不能先移动指针,因为指针指向的当前数就是我们需要删除的那个数。直接统计删去后对整个区间的影响。需要先将查询区间内小于当前数的出现次数,统计答案减去查询值,最后在移动指针。

注意我们的指针指向的元素都是我们当前要操作的那个元素,这样会方便一点,不然的话会比较麻烦

inline void Del_l(ll &g) {ll x=a[lt];Add(x,-1);g-=query(x-1);++lt;return ;
}
#include<bits/stdc++.h>
#define MAXN 100005
#define ll long long
using namespace std;ll a[MAXN],b[MAXN];
ll t[MAXN*2];
ll n,m,cnt;
ll sQrt;ll Ans[MAXN];struct Qruey_ {ll l,r,id;
} q[MAXN];ll lt=1,rt=0;
ll sum=0;inline void read(ll &x) {char c=getchar();bool f=0;x=0;while(!isdigit(c)) {f|=(c=='-');c=getchar();}while(isdigit(c)) {x=(x<<3)+(x<<1)+(c^48);c=getchar();}x=f?(-x):x;return ;
}
//////////////////////////////////////树
inline ll Lowbit(ll x) {return x&(-x);
}
inline void Add(ll x,ll k) {for(; x<=cnt; x+=Lowbit(x)) {t[x]+=k;}return ;
}
inline ll query(ll x) {ll ans=0;for(; x>0; x-=Lowbit(x)) {ans+=t[x];}return ans;
}inline bool cmp(Qruey_ a,Qruey_ b) {ll sa=a.l/sQrt, sb=b.l/sQrt;if(sa!=sb)return sa<sb;return (sa%2)?(a.r>b.r):(a.r<b.r);
}////////////////////////////////////////莫队
inline void Add_l(ll &g) {--lt;ll x=a[lt];g+=query(x-1);Add(x,1);return ;
}
inline void Del_l(ll &g) {ll x=a[lt];Add(x,-1);g-=query(x-1);++lt;return ;
}inline void Add_r(ll &g) {++rt;ll x=a[rt];g+=query(cnt)-query(x);Add(x,1);return ;
}
inline void Del_r(ll &g) {ll x=a[rt];Add(x,-1);g-=query(cnt)-query(x);--rt;return ;
}int main() {read(n),read(m);for(ll i=1; i<=n; ++i) {read(a[i]);b[i]=a[i];}sort(b+1,b+1+n);cnt=unique(b+1,b+1+n)-(b+1);for(ll i=1; i<=n; ++i) {a[i]=lower_bound(b+1,b+1+cnt,a[i])-b;}for(ll i=1; i<=m; ++i) {read(q[i].l),read(q[i].r);q[i].id=i;}sQrt=(ll)sqrt(n)+1;sort(q+1,q+1+m,cmp);memset(t,0,sizeof(t));for(ll i=1; i<=m; ++i) {ll L=q[i].l, R=q[i].r;while(lt>L) {Add_l(sum);}while(lt<L) {Del_l(sum);}while(rt<R) {Add_r(sum);}while(rt>R) {Del_r(sum);}Ans[q[i].id]=sum;}for(ll i=1; i<=m; ++i) {printf("%lld\n",Ans[i]);}return 0;
}

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

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

相关文章

基于MATLAB的齿轮故障检测

一、系统架构设计 %% 主程序框架 clear; clc; close all;%% 参数设置 fs = 10000; % 采样频率 t = 0:1/fs:1; % 时间向量 fault_types = {healthy,crack,wear,broken}; num_samples = 10; % 每类样本数量%% …

Linux 中检测gz压缩文件是否损坏

Linux 中检测gz压缩文件是否损坏。001、[s20233040742@admin2 x_test]$ ls a.sh b.sh [s20233040742@admin2 x_test]$ seq 10 | gzip > a.txt.gz [s20233040742@admin2 x_test]$ echo "xxx" > b.txt.…

从静态图表到交互叙事:数据可视化的新范式与实现 - 实践

从静态图表到交互叙事:数据可视化的新范式与实现 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销

2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销在数字化营销浪潮中,信息流广告已成为企业获取流量、实现转化的重要渠道。随着算法技术的迭代和用户行为的变迁,信息流代运…

2025 年 PP 管厂家最新推荐榜:全面甄选优质 pp 风管、PP 喷淋塔等产品厂家,助力实验室场景精准选型

当前 PP 管市场虽供需活跃,但采购难题却让众多企业倍感困扰。部分厂家为追求利润,使用劣质原料生产,导致产品耐腐蚀性、抗老化性大幅下降,在使用中频繁出现破裂、渗漏问题,不仅造成经济损失,还带来安全隐患。同时…

基于MATLAB的无线传感器网络(WSN)仿真程序实现

一、系统架构设计 graph TD A[网络初始化] --> B[节点部署] B --> C[路由协议运行] C --> D[能量消耗计算] D --> E[性能评估] E --> F[可视化展示]二、核心代码实现 1. 网络参数初始化 %% 系统参数设置…

NMAP扫描

NMAP 扫描-sT — TCP connect 扫描 使用操作系统的 connect() 建立完整 TCP 连接(非特权用户可用)。容易被检测/记录,但兼容性最好。-sS — SYN(半开)扫描(又称 stealth) 发送 SYN 后根据返回包判断端口状态(…

MyEMS:衔接 “双控” 政策与企业实践的开源能源管理利器

在 “碳达峰、碳中和” 战略目标引领下,能源消费总量和强度双控制度(以下简称 “双控” 政策)已成为我国推动能源结构优化、倒逼企业绿色转型的核心抓手。然而,不少企业在落实 “双控” 要求时,面临着能耗数据碎片…

权限维持-Windows权限维持

权限维持-Windows权限维持 1.注册表权限维持Get-ItemProperty -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Run | >> Format-List可以看到这里有个flag.bat执行文件,我们去文件资源管理器里面看看…

2025 电动轮椅厂家最新推荐榜:深度解析智能轻便 / 长续航 / 高安全国产优质品牌核心优势

随着人口老龄化加剧与残障人士出行需求升级,电动轮椅市场规模持续扩张,但行业乱象也随之凸显。市场上产品质量两极分化,部分产品宣称 “轻便折叠” 却因材质劣质导致机身笨重,标榜 “安全可靠” 却缺乏核心防护技术…

2025年信息流代运营服务商权威推荐榜单:专业投放策略与高效转化服务口碑之选

2025年信息流代运营服务商权威推荐榜单:专业投放策略与高效转化服务口碑之选在数字营销快速演进的今天,信息流广告已成为企业获取流量、实现转化的重要渠道。随着算法技术的不断升级和用户行为的日益复杂,信息流代运…

一些框架

一些框架1 OpenMCT:一套NASA阿姆斯研究中心开源Mission Control框架,专门帮你在浏览器或手机里展示、分析各种遥测数据

1017

商业秘密权可以对软件的技术信息和经营信息进行保护 专利申请 注册商标专利权不看谁先完成 也不看谁先使用 看谁先申请 专利权只能由一方获得外模式---视图 模式---基本表 内模式---存储文件

2025 建筑工程施工总包公司最新推荐榜:聚焦质量管控与新锐势力,优质企业权威甄选

当前建筑工程行业正处于高质量发展转型关键期,市场对工程质量、环保标准与管理效率的要求持续升级,但行业内仍存在资质参差不齐、工期延误、隐性成本突出等问题,让业主与开发商在选择施工总包企业时面临诸多困扰。尤…

2025 广州人力资源/派遣/外包/劳务外包/人事代理/推荐榜:精典人才创新 5 星领跑,适配招聘 / 测评 / 培训全场景企业需求

随着广州企业对 “精准人才匹配 + 科学人才评估 + 持续能力提升” 需求升级,专业人力资源服务成为优化团队、降本增效的关键。结合服务完整性、行业适配度、响应效率与用户反馈,2025 年广州人力资源推荐榜发布,广州…

反事实推理防御AI黑客攻击技术解析

本文探讨了如何利用反事实推理技术增强自动驾驶系统的安全性,防止黑客通过特洛伊木马攻击操纵AI决策。研究展示了通过让AI系统提出"假设性"问题,能够识别并忽略恶意训练信号,提高系统在对抗性攻击下的稳健…

2025 年选矿行业 2 号油厂家最新推荐排行榜:环保型 / 新型 / JQ202/101/QX/BK201/323 起泡剂等产品权威筛选,助力企业选对优质供应商

引言在选矿生产流程中,2 号油作为核心起泡剂,直接决定着矿物分离效率与企业最终收益,其品质的重要性不言而喻。当前市场上 2 号油品牌数量繁多,但质量差距悬殊,部分品牌因技术落后,生产的产品起泡稳定性差,无法…

2025 年探伤仪厂商最新推荐榜单:涡流 / 超声波 / 管材 / 焊缝 / 无损探伤仪优质企业权威盘点

在工业生产高质量发展的当下,无损检测是保障产品安全、把控生产质量的核心环节,而探伤仪作为关键检测设备,其性能与品质直接影响检测结果的准确性与生产效率。当前市场上,探伤仪品牌数量众多,但产品质量参差不齐,…

微调 - Lora

与其说 Lora 是一个算法,不如说 lora 是一个工程技巧?

2025 年罗茨风机厂家最新推荐排行榜权威发布!深度解析各品牌优势助企业精准选型UNTW无泄漏/BRW水冷式罗茨风机厂家推荐

当前罗茨风机市场需求持续增长,但行业乱象却让企业选型难题凸显。众多小品牌以次充好,采用劣质材料和落后工艺生产,导致设备故障频发,不仅增加企业维修成本,还影响生产进度;部分品牌技术停滞不前,产品能耗高、噪…