[国家集训队] 小Z的袜子

大视野在线测评:2038: [2009国家集训队]小Z的袜子(hose) 莫队算法,分块处理 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 4317  Solved: 1972 [Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人 阅读详情

题目链接

题目大意是给你一串数,问你在一个区间内取到相同的数的概率是多少

因为是静态区间, O ( n n ) O(n\sqrt n) O(nn ​)可过,加上题目名称,所以我们考虑莫队

莫队的主要步骤就是

  1. 读入,离线
  2. 按分块排序
  3. 处理贡献
  4. 输出

如果不懂的可以去看看网上的其它的一些博客, s u c h   a s such \ as such as this
1,2,4都不难,我们考虑怎么计算贡献
其实也挺简单的,设值域为 [ 0 , k ] [0,k] [0,k]
那么对于 [ l , r ] [l,r] [l,r]区间的答案,就应该是
∑ i = 0 k C c n t i 2 C r − l + 1 2 \frac{\sum_{i=0}^k C_{cnt_i}^2}{C_{r-l+1}^2} Cr−l+12​∑i=0k​Ccnti​2​​

因为总情况数是 C r − l + 1 2 C_{r-l+1}^2 Cr−l+12​,对于每一种颜色有 C c n t i 2 C_{cnt_i}^2 Ccnti​2​种选法 小奥内容
因为分母是固定的,所以我们只需要算分子
那么我们要看一下,当我们 a d d add add活着 d e l del del的时候,分子中的 C C C变化了多少

有一种懒人的方法,在 a d d add add的时候,先减去之前 C c n t i 2 C_{cnt_i}^2 Ccnti​2​,然后 c n t i cnt_i cnti​++,然后再加回来, d e l del del也同理
但是为了让代码更加美观,我们发现,当 c n t i cnt_i cnti​+1的时候,他的贡献多了
d = C c n t i + 1 2 − C c n t i 2 = c n t i d=C_{cnt_i+1}^2-C_{cnt_i}^2=cnt_i d=Ccnti​+12​−Ccnti​2​=cnti​
当 d e l del del的时候,他的贡献少了
d = C c n t i 2 − C c n t i − 1 2 = c n t i − 1 d=C_{cnt_i}^2-C_{cnt_i-1}^2=cnt_i-1 d=Ccnti​2​−Ccnti​−12​=cnti​−1
然后代码就变得美观了

记得分数要通分,还有0/1的特判

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <stack>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;
const int N=1e5+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}
# pragma GCC optimize(3)
# define int long long

int n,m,sq,l=1,r=0;
int a[N];
int pos[N];
int cnt[N],now;
pair<int,int> ans[N];

struct Query{
	int l,r,id;
	bool operator < (const Query &cmp)const{
		if(pos[l]!=pos[cmp.l])return pos[l]<pos[cmp.l];
		if(pos[l]&1)return r<cmp.r;
		return r>cmp.r;
	}
}q[N];

void add(int p){
	now+=cnt[a[p]];
	cnt[a[p]]++;
}

void del(int p){
	cnt[a[p]]--;
	now-=cnt[a[p]];
}

signed main()
{
	read(n),read(m);
	Rep(i,1,n)read(a[i]);
	sq=sqrt(n);
	Rep(i,1,n)pos[i]=(i-1)*sq+1;
	Rep(i,1,m){
		read(q[i].l);
		read(q[i].r);
		q[i].id=i;
	}
	sort(q+1,q+m+1);
	Rep(i,1,m){
//		if(q[i].l==q[i].r)ans[q[i].id]=make_pair(0,1);
		while(l<q[i].l){
			cnt[a[l]]--;
			now-=cnt[a[l]];
			l++;	
		}
		while(l>q[i].l){
			l--;
			now+=cnt[a[l]];
			cnt[a[l]]++;	
		}
		while(r<q[i].r){
			r++;
			now+=cnt[a[r]];
			cnt[a[r]]++;	
		}
		while(r>q[i].r){
			cnt[a[r]]--;
			now-=cnt[a[r]];
			r--;	
		}
		if(!now)ans[q[i].id]=make_pair(0,1);
		else{
			int len=q[i].r-q[i].l+1;
			int sec=len*(len-1)/2;
			int g=__gcd(now,sec);
			ans[q[i].id]=make_pair(now/g,sec/g);
		}
	}
	Rep(i,1,m)printf("%lld/%lld\n",ans[i].first,ans[i].second);
	return 0;
}

然而因为我太菜了,以及种种原因,这份代码需要手动 O ( 3 ) O(3) O(3)+ l u o g u luogu luogu O ( 2 ) O(2) O(2)才能过,不知道为啥…

AUTOSAR AP平台开发避坑指南:基于华为MDC的接口配置与数据通道实战 本文详细解析了AUTOSAR AP平台与华为MDC的协同开发实践,涵盖接口配置、数据通道优化及资源分配策略。通过实战案例展示如何解决传感器接入、通信协议栈优化等常见问题,提升智能驾驶系统性能。特别针对MDC平台特性,提供执行管理、调试调优及安全设计的专业指导,助力开发者高效完成ADAS/AD系统开发。 阅读详情

相关推荐

DW1000芯片实战:如何用UWB技术打造10厘米精度的室内定位系统(附Arduino代码)

本文是一份基于DW1000芯片和UWB技术的实战指南,详细介绍了如何从零构建一个精度可达10厘米的室内定位系统。内容涵盖硬件选型与连接、软件环境配置、核心的双向测距算法实现,并深入探讨了信号干扰抑制、功耗优化等实战挑战,为物联网开发者提供了完整的Arduino代码和部署思路。

root9的博客 496

洛谷 P1494 [国家集训队] 小 Z 的袜子 题解 莫队

莫队 桶排序 组合数 区间询问 洛谷题解 C++代码 附详细注释

一只摸鱼的bbc 1271

10.2 在新能源、储能及电网节点的应用实践

构网型变流器技术在电力系统中的应用进展 构网型变流器技术正从理论研究走向规模化工程应用,为新能源并网提供主动支撑能力。该技术在光伏电站采用"部分构网"混合架构,由构网单元实现黑启动和弱网稳定;在风电场利用叶轮动能提供惯量响应。储能系统是理想的构网载体,可提供快速调频和动态电压支撑。在电网节点,构网型STATCOM可增强弱电网电压稳定性,大容量变流器可替代传统调相机。当前面临标准滞后、宽频振荡风险等共性挑战,需在可靠性、经济性间取得平衡。系统级协调控制和精确阻抗建模是应用成功的关键。

技术工作者 1109

P1494 [国家集训队]小Z的袜子

P1494 [国家集训队]小Z的袜子 #include<iostream> #include<cstdio> #include<queue> #include<algorithm> #include<cmath> #include<ctime> #include<set> #inc...

weixin_30901729的博客 86

OpenEuler内核编译及替换

一、内核源码下载 在gitee上下载OpenEuler内核源码 下载地址 选择需要的内核版本源码压缩包进行下载 二、内核编译 1.解压缩 将下载好的源码进行解压 tar xvf openeuler-kernel-4.19.90-2107.1.0.tar.gz 2.清理源代码树 解压后得到一个名为kernel的内核源码文件夹,进入后执行命令 make mrproper 清理过去内核编译产生的config,第一次编译时可不执行此命令 3.生成内核配置文件.config 先将将系统原配置文件拷贝过来,原

m0_56602092的博客 2万+

使用 ANSYS 实现铸造、凝固和熔炼的高级解决方案

凭借其强大的有限元分析 (FEA) 和计算流体动力学 (CFD) 功能,ANSYS 可以准确预测模具内的热和流体流动行为。总之,ANSYS 是铸件凝固和熔化领域的关键工具。其全面的仿真功能、工艺优化功能、材料特性分析和用户友好的界面使其成为旨在创新和改进制造工艺的工程师不可或缺的工具。通过利用 ANSYS,各行各业可以在铸造业务中实现更高的质量、效率和成本效益,从而为先进的制造解决方案铺平道路。ANSYS是一款领先的工程仿真软件,提供强大的功能来建模和优化这些复杂的热过程,从而显著提高生产效率和质量。

jkh920184196的博客 2108

BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队】

2038: [2009国家集训队]小Z的袜子(hose) 【题目描述】 传送门 【题解】 裸的莫队,套一下组合数就可以了。 代码如下 #include<cmath> #include<cstdio> #include<cctype> #include<algorithm> #define...

aiweiluan5095的博客 129

TESSY创建单元测试或集成测试工程

我们以tessy5.1为例,给大家展示单元测试和集成测试工程的创建过程。

空气中的告白专栏 1681

P1494 [国家集训队]小Z的袜子 (莫队)

P1494 [国家集训队]小Z的袜子 (莫队) 离线莫队 题目链接 [L,R]区间内: 设每种袜子的数量分别为: 则答案为: 化简即为: 所以我们求:即可 #include <iostream> #include <cstdio> #include <algorithm> #i...

xcatf的博客 187

使用 WSL 在 Windows 上安装 Linux

开发人员可以在 Windows 计算机上同时访问 Windows 和 Linux 的强大功能。通过适用于 Linux 的 Windows 子系统 (WSL),开发人员可以安装 Linux 发行版(例如 Ubuntu、OpenSUSE、Kali、Debian、Arch Linux 等),并直接在 Windows 上使用 Linux 应用程序、实用程序和 Bash 命令行工具,不用进行任何修改,也无需承担传统虚拟机或双启动设置的费用。

隔壁老瓦的专栏 2872

CloudCompare二次开发(1)——获取指定高程的所有点

使用CloudCompare插件实现获取点云数据中指定高程的所有点。

点云侠的博客 4732

BZOJ2038 : [2009国家集训队]小Z的袜子(hose)(莫队算法)

2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 19269 Solved: 8851 [Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜...

weixin_30387663的博客 128

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

bzoj 2038 [2009国家集训队]小Z的袜子(hose)

2038: [2009国家集训队]小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却...

aln1541的博客 122

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

洛谷 P1494 [国家集训队]小Z的袜子 莫队

洛谷 P1494 [国家集训队]小Z的袜子 题意 离线询问区间 [l,r][l,r][l,r] 内随机抽取两个数恰好相同的概率。(维护相同数字对数) 解法 莫队 答案 $ans=(\sum A2_{cnt[i]})/A{2}_{len} $ ,其中 len=r−l+1len=r-l+1len=r−l+1 表示区间的长度。 可以通过 cntcntcnt 数组 O(1)O(1)O(1) 转移答案,把原来的分子的贡献减掉,加上新的贡献即可。 代码 #pragma region #include <alg

bandiaoz的博客 177

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

莫队算法 2038: [2009国家集训队]小Z的袜子(hose)

链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit:20 SecMemory Limit:259 MBSubmit:6475Solved:3004[Submit][Status][Discuss] Description ...

Nobel7889的专栏 109

P1494 [国家集训队] 小 Z 的袜子

莫队

Hardy_Lee的博客 217

[国家集训队]小Z的袜子

设当前询问端点为$l,r$,则目前有$n$中不同颜色的袜子,分别是$a_1,a_2...a_n$,第$i$种颜色的袜子有$cnt_i$只 则抽到两只袜子的情况数有$cnt_1*(cnt_1-1)/2+cnt_2*(cnt_2-1)/2+......+cnt_n*(cnt_n-1)/2$种。 化简:$cnt_1*(cnt_1-1)/2+cnt_2*(cnt_2-1)/2+......+...

weixin_30408165的博客 152

P1494 [国家集训队]小Z的袜子/莫队学习笔记(误

P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小\(Z\)把这\(N\)只袜子从\(1\)到\(N\)编号,然后从编号\(L\)到\(R\)(\(L\)尽管小\(Z\)并不在意两只袜子是不是完整的一双,甚至不在意两只袜...

weixin_30679823的博客 90

BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队

BZOJ_2038_[2009国家集训队]小Z的袜子(hose)_莫队 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左...

97

2038: [2009国家集训队]小Z的袜子(hose)

2038: [2009国家集训队]小Z的袜子(hose) Time Limit:20 SecMemory Limit:259 MBSubmit:15879Solved:7205[Submit][Status][Discuss] Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的...

weixin_30784141的博客 70

莫队——[国家集训队]小Z的袜子

题目链接 题目描述 作为一个生活散漫的人,小 Z 每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小 Z 再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小 Z 把这 N 只袜子从 1 到 N 编号,然后从编号 L 到 R (L 尽管小 Z 并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。 你的任务便是告诉小 Z,他有多大的概率抽到两只颜色相同的袜子。当然,小 Z 希望这个概率尽量高,所以他可能会询

linjiayina的博客 188

【国家集训队2010】小Z的袜子[莫队算法]

【国家集训队2010】小Z的袜子Description作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿。终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。

gzy_cjoier的博客 482
上一篇: 乘法逆元进阶([模板]乘法逆元 2)
下一篇: [USACO07DEC] Sightseeing Cows
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值