P1494 小Z的袜子 莫队
就是将$add$和$del$函数里的$ans$变化变成组合数嘛,
先预处理出$x$只相同袜子一共有$f[x] = 1+2+...+$$(x-1)$种组合,
要注意,由于$f[x]$是一直加到$x-1$,所以我们要$add,del$两个函数中都要关注这个问题:
$add$函数要先更改$ans$数值再改$cnt$,$del$函数要先更改$cnt$再改$ans$数值
再就是直接套莫队板子了,板子还是注意给问题排序时要分块
当然小学数学老师教过我们,分数再最后要约分
上代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define ll long long
#define NUM 50010
using namespace std;
ll f[NUM];//预处理的组合数
int a[NUM],cnt[NUM];
int n,m;
struct wen{
int l,r,num;
};
wen q[NUM];//存下每个问题
int blo;//每个块内的元素数量
bool cmp( wen x,wen y ){
if( x.r/blo == y.r/blo ) return x.l < y.l;
return x.r < y.r;
}
ll ans;
void add( int x ){
ans += cnt[a[x]];
cnt[a[x]]++;
}
void del( int x ){
cnt[a[x]]--;
ans -= cnt[a[x]];
}
struct da{
ll zi,mu;//对于每个问题的答案的分子分母
};
da anss[NUM];
ll gcd( int x,int y ){
if( x < y ) swap( x,y );
if( y == 0 ) return x;
return gcd( y,x%y );
}
int main(){
cin >> n >> m;
blo = sqrt(n);
for( int i = 1;i <= n;i++ )
f[i] = f[i-1] + i;
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].num = i;
}
sort( q+1,q+m+1,cmp );
int l = 1,r = 0,ql,qr;
for( int i = 1;i <= m;i++ ){
ql = q[i].l,qr = q[i].r;
if( qr == ql ){ //如题干所言,特判
anss[q[i].num].zi = 0;
anss[q[i].num].mu = 1;
continue;
}
while( l < ql ){
del( l );
l++;
}
while( r > qr ){
del( r );
r--;
}
while( l > ql ){
l--;
add( l );
}
while( r < qr ){
r++;
add( r );
}
ll mu = f[qr-ql],p = gcd( ans,mu );
anss[q[i].num].zi = ans/p;
anss[q[i].num].mu = mu/p;//约分
}
for( int i = 1;i <= m;i++ )
cout << anss[i].zi << "/" << anss[i].mu << endl;
return 0;
}
P1494 小Z的袜子 莫队的更多相关文章
- 小Z的袜子 & 莫队
莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...
- P1494 [国家集训队]小Z的袜子/莫队学习笔记(误
P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...
- BZOJ 2038 [2009国家集训队]小Z的袜子 莫队
2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...
- 【国家集训队2010】小Z的袜子[莫队算法]
[莫队算法][国家集训队2010]小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程, ...
- bzoj 2308 小Z的袜子(莫队算法)
小Z的袜子 [题目链接]小Z的袜子 [题目类型]莫队算法 &题解: 莫队算法第一题吧,建议先看这个理解算法,之后在参考这个就可以写出简洁的代码 我的比第2个少了一次sort,他的跑了1600m ...
- Luogu 1494 - 小Z的袜子 - [莫队算法模板题][分块]
题目链接:https://www.luogu.org/problemnew/show/P1494 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天 ...
- BZOJ 2038 小z的袜子 & 莫队算法(不就是个暴力么..)
题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过 ...
- BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块
作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z把这N只袜子从1到N编号,然后从 ...
- [国家集训队][bzoj2038] 小Z的袜子 [莫队]
题面: 传送门 思路: 又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率 我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少? 原来的总情况数是i*(i-1)/ ...
随机推荐
- 1.1 Qt Creater使用Python开发桌面软件的操作流程
Qt Creater及Python的下载与安装过程不再赘述,读者可自行在网上搜索相应的下载与安装方法. 首先我们打开Qt Creater,单击"Create Project"按钮或 ...
- 《图解UE4渲染体系》Part 1 多线程渲染
上回书<Part 0 引擎基础>说到,我们粗略地知道UE4是以哪些类来管理一个游戏场景里的数据的,但这仅仅是我们开始探索UE4渲染体系的一小步. 本回主要介绍UE4渲染体系中比较宏观顶层的 ...
- [STL] stack 栈
在出栈时需要进行两步操作,即先 top( ) 获得栈顶元素,再 pop( ) 删除栈顶元素
- [AcWing 87] 把字符串转换成整数
点击查看代码 class Solution { public: int strToInt(string str) { int k = 0; while (k < str.size() & ...
- [笔记] $f(i)$ 为 $k$ 次多项式,$\sum_{i=0}^nf(i)\cdot q^i$ 的 $O(k\log k)$ 求法
\(f(i)\) 为 \(k\) 次多项式,\(\sum_{i=0}^nf(i)\cdot q^i\) 的 \(O(k\log k)\) 求法 令 \(S(n)=\sum_{i=0}^{n-1}f(i ...
- 为什么 Nginx 比 Apache 更厉害?
关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 为什么Nginx在处理高并发方面要优于httpd,我们先从两种web服务器的工作原理以及工作模 ...
- muduo项目介绍
在上一个集群聊天服务器项目中,我使用了muduo作为网络库,然后主要实现了业务逻辑等,所以为了深入网络库的代码和实现,我跟着一位老师的代码去实现了muduo库的基本原理和作用,当然只是实现了主体的代码 ...
- jQuery.extend()[$.extend()]
jQuery.extend(target, object1[,objectN]);jQuery.extend([deep], target, object1[,objectN]);jQuery.ext ...
- idea的快捷键(复制) IntelliJ Idea 常用快捷键列表
Ctrl+Shift + Enter,语句完成'!',否定完成,输入表达式时按 "!"键 Ctrl+E,最近的文件Ctrl+Shift+E,最近更改的文件Shift+Click,可 ...
- 使用用户名密码或ssl证书获取zabbix-api token,批量操作管理zabbix-server
概述 Zabbix API 允许你以编程方式检索和修改 Zabbix 的配置,并提供对历史数据的访问.它广泛用于: 创建新的应用程序以使用Zabbix: 将Zabbix与第三方软件集成: 自动执行常规 ...