BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2038
题意概括:
有 N 只袜子(分别编号为1~N),有 M 次查询 (L, R)里面随机拿两只袜子,拿到相同颜色袜子的概率是多少。
解题思路:
莫队算法经典题,暴力找出区间内相同颜色的袜子的个数,排列组合最后得出结果。
入门题,当模版。
AC code:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#define LL long long
using namespace std; const int MAXN = 5e4+;
int pos[MAXN], c[MAXN];
LL s[MAXN], res;
int N, M, L = , R = ; LL gcd(LL a, LL b){return b==?a:gcd(b, a%b);}
LL sqr(LL x){return x*x;}
struct date{
int l, r, id;
LL so, mo;
}q[MAXN];
bool cmp(date a, date b){
if(pos[a.l]==pos[b.l]) return a.r < b.r;
return a.l < b.l;
}
bool CMP(date a, date b){
return a.id < b.id;
}
void Update(int x, int add)
{
//res-=sqr(s[c[x]]);
res-=s[c[x]]*s[c[x]];
s[c[x]]+=add;
res+=s[c[x]]*s[c[x]];
//res+=sqr(s[c[x]]);
} int main()
{
scanf("%d%d", &N, &M);
int sz = sqrt(N);
for(int i = ; i <= N; i++){
scanf("%d", &c[i]);
//pos[i] = (i-1)/sz+1;
pos[i] = i/sz;
}
for(int i = ; i <= M; i++){
scanf("%d%d", &q[i].l, &q[i].r);
q[i].id = i;
}
sort(q+, q+M+, cmp);
for(int i = ; i <= M; i++){
while(R < q[i].r){R++; Update(R, );}
while(R > q[i].r){Update(R, -); R--;}
while(L < q[i].l){Update(L, -); L++;}
while(L > q[i].l){L--; Update(L, );}
if(q[i].l == q[i].r){
q[i].so = ;q[i].mo = ;
continue;
}
q[i].so = res-(q[i].r-q[i].l+);
q[i].mo = (LL)(q[i].r-q[i].l+)*(q[i].r-q[i].l);
LL k = gcd(q[i].so, q[i].mo);
q[i].so/=k;q[i].mo/=k;
}
sort(q+, q+M+, CMP);
for(int i = ; i <= M; i++){
printf("%lld/%lld\n", q[i].so, q[i].mo);
}
return ;
}
BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】的更多相关文章
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 7687 Solved: 3516[Subm ...
- Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 5763 Solved: 2660[Subm ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )
莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...
- BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫对算法
这里跟曼哈顿最小生成树没有太大的关系. 时间复杂度证明: [BZOJ2038 小Z的袜子 AC代码] 排序方式: 第一关键字:l所在的块: 第二关键字:r从小到大. #include<cstdi ...
- bzoj 2038: [2009国家集训队]小Z的袜子(hose) (莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 3577 Solved: 1652[Subm ...
- [BZOJ2038] [2009国家集训队]小Z的袜子(hose) 莫队算法练习
2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MBSubmit: 10299 Solved: 4685[Sub ...
- BZOJ 2038: [2009国家集训队]小Z的袜子 (莫队)
题目传送门:小Z的袜子 Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… ...
- 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法
原文地址:http://www.cnblogs.com/GXZlegend/p/6803860.html 题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终 ...
- BZOJ2038: [2009国家集训队]小Z的袜子(hose) 莫队算法
要使用莫队算法前提 ,已知[l,r]的答案,要能在logn或者O(1)的时间得到[l+1,r],[l-1,r],[l,r-1],[l,r+1],适用于一类不修改的查询 优美的替代品——分块将n个数分成 ...
随机推荐
- Ubuntu系统里如何正确卸载oracle-j2sdk1.6(图文详解)
问题来源 因为,我在安装clouder manager5.X的时候,默认是需要oracle-j2sdk1.7. 它4.X时,才是1.6的. 若你还是在用clouder manager4.X版本的话,需 ...
- Eclipse设置JVM的内存参数
打开Eclipse 或者 MyEclipse 打开 Windows -> Preferences -> Java -> Installed JREs 选中你所使用的 JDK,然后点击 ...
- js字符操作
js字符串方法预览: fromCharCode(num1, num2,,,), charAt(), charCodeAt(), length, split(''), slice(start, end? ...
- UML建模 - 用例和用例图
用例描述 用例描述一般包括: 用例编号.用例概述(说明).前置(前提)条件.基本事件流.其他事件流.异常事件流.后置(事后)条件等.如下: 元素 描述 备注 用例编号 为用例制定一个唯一的编 ...
- 如何优化VMWare虚拟机的运行速度(转)
虚拟机是个好东西,但是对电脑有一定的要求.尤其对做工控的来说都需要安装一些大型的软件(其中WINCC最难装,对系统要求较高.而且像WIN 7 64位的就别想装上去了,如果改系统后那4G以上的内存不就浪 ...
- 重构指南 - 尽快返回(Return ASAP )
尽快返回就是如果方法中的条件判断可以得到结果,则尽快返回该结果. 1. 检查条件,如果不满足就立即返回,不执行下面的逻辑. 2. 当包含大量的if else嵌套,代码可读性变差,也容易出现异常. 3. ...
- centos解决The path "" is not a valid path to the 3.2.0-4-amd64 kernel headers.问题
我的机子炸了,然后我就得重新装我的虚拟机,再然后我就想去弄好我的共享文件夹安装vmtools,安装的时候出现了一个问题,我忘记以前是怎么解决的,又困扰了我好久 Searching for a vali ...
- Canvas绘制图片模糊
canvas是html5的新标签,是个可以绘制图形的画布,画布的默认大小为300x150.在自定义绘制画布大小的时候有注意的问题,就是用样式来设置高度和宽度的时候 比如 <div style=& ...
- jQuery动态添加删除CSS样式
jQuery框架提供了两个CSS样式操作方法,一个是追加样式addClass,一个是移除样式removeClass,下面通过一个小例子讲解用法. jQuery动态追加移除CSS样式 <!DOCT ...
- python随机生成手机号码
一句话生成电话号码random.choice(['139','188','185','136','158','151'])+"".join(random.choice(" ...