bzoj 2038 [2009国家集训队]小Z的袜子(hose)(莫队算法)
【题目链接】
http://www.lydsy.com/JudgeOnline/problem.php?id=2038
【题意】
给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率。
【思路】
设一个颜色在区间内的出现次数为cnt,则抽到这种颜色的概率为:
(cnt-1)*cnt/2 = 1+2+…+cnt-1
对于一个区间我们就可以使用一个cnt数组通过扫一遍得出答案。暴力的话,可以拿两个指针,每次移动指针,对数据进行插入与删除。
莫队算法就是在此基础上有序化了数据。将序列每sqrt(n)分成一块,根据查询的左端点所在块编号和右端点为第一二关键字排序。相邻的区间的重叠部分不重复计算,而是采用移动指针的方法,并通过合适的数据结构维护区间内的数据,支持在原来答案的基础上添加或删除数据即区间移动。
关于复杂度的分析:
一、i与i+1在同一块内,r单调递增,所以r是O(n)的。由于有n^0.5块,所以这一部分时间复杂度是n^1.5。
二、i与i+1跨越一块,r最多变化n,由于有n^0.5块,所以这一部分时间复杂度是n^1.5
三、i与i+1在同一块内时变化不超过n^0.5,跨越一块也不会超过2*n^0.5,不妨看作是n^0.5。由于有n个数,所以时间复杂度是n^1.5
于是就变成了O(n^1.5)了from...不详
【代码】
#include<set>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define trav(u,i) for(int i=front[u];i;i=e[i].nxt)
#define FOR(a,b,c) for(int a=(b);a<=(c);a++)
using namespace std; typedef long long ll;
const int N = 5e4+; ll read() {
char c=getchar();
ll f=,x=;
while(!isdigit(c)) {
if(c=='-') f=-; c=getchar();
}
while(isdigit(c))
x=x*+c-'',c=getchar();
return x*f;
} struct Node
{
int pos,l,r,id;
bool operator < (const Node& rhs) const
{
return pos<rhs.pos||(pos==rhs.pos&&r<rhs.r);
}
}q[N]; ll gcd(ll a,ll b)
{
return b==? a:gcd(b,a%b);
} int n,m,c[N],cnt[N];
pair<int,int> ans[N]; int main()
{
n=read(),m=read();
FOR(i,,n) c[i]=read();
int B=sqrt(n);
FOR(i,,m)
{
q[i].l=read();
q[i].r=read();
q[i].pos=(q[i].l-)/B+;
q[i].id=i;
}
sort(q+,q+m+);
int l=,r=; ll now=;
FOR(i,,m)
{
while(l>q[i].l)
now+=cnt[c[--l]]++;
while(l<q[i].l)
now-=--cnt[c[l++]];
while(r<q[i].r)
now+=cnt[c[++r]]++;
while(r>q[i].r)
now-=--cnt[c[r--]];
ll sum=(ll)(r-l+)*(r-l)/;
ll g=gcd(sum,now);
ans[q[i].id]=make_pair((int)now/g,(int)sum/g);
}
FOR(i,,m)
printf("%d/%d\n",ans[i].first,ans[i].second);
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个数分成 ...
随机推荐
- 10位IT领袖给应届毕业生的10条忠告
10位IT领袖给应届毕业生的10条忠告,在走向独立和自主的伟大征程中,吸取他们的经验. 在毕业生们迈出象牙塔之时,他们应该听从哪些人的建议?在走向独立和自主的伟大征程中,他们该吸取哪些教训?听一听各领 ...
- URAL 1200 Horns and Hoofs 枚举
设horns和hoofs的数量分别为 x 和 y ,题目要求: 满足 x+y <= K,使得A*x + B*y - x*x - y*y 最大. 枚举 i 从0~K,直接解方程得对称轴 x = ( ...
- dd命令刻录u盘启动盘
dd命令来刻录windows启动盘 dd if=/ home/avi/Downloads/Win10_English_x64.iso of=/ dev/sdb1 bs=51M; sync dd命令详解 ...
- ArcGIS Engine中的8种数据访问
数据是GIS的基础, 访问数据也是进行任何复杂的空间分析及空间可视化表达的前提.ArcGIS支持的数据格式比较丰富,对不同的数据格式支持的程度也有很大差异.本文主要介绍一下以下八种数据格式在ArcGI ...
- Support Library(4)ecliplse导入支援包的方法
准备工作 下载支援包到本地.在 <sdk>/android-sdks/extras/android/support/v7 下包含两个目录「 m2repository,support 」 ...
- 【转载】Javascript原型继承-学习笔记
阮一峰这篇文章写的很好 http://www.ruanyifeng.com/blog/2011/06/designing_ideas_of_inheritance_mechanism_in_javas ...
- JSP:include的flush属性的作用
JSP 中include 另一个文件时有个很偏的属性,叫flush,默认为 false. 在同一个 JSP 中,如果不断 include 自己(源文件),在逻辑上会形成死循环.若默认情况下,服务器 ...
- fixed兼容IE6
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Asp.Net正则获取页面a标签里的内容
Asp.Net正则获取页面a标签里的内容 string url = "http://www.114369.com"; string html = MyCLib.NetClass.S ...
- [转] POJ计算几何
转自:http://blog.csdn.net/tyger/article/details/4480029 计算几何题的特点与做题要领:1.大部分不会很难,少部分题目思路很巧妙2.做计算几何题目,模板 ...