【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=2038

【算法】

莫队算法

【代码】

#include<bits/stdc++.h>
using namespace std;
#define MAXN 50010
typedef long long ll; struct info
{
ll x,y;
} ans[MAXN];
struct Query
{
ll l,r,id;
} q[MAXN],tmp[MAXN]; ll i,j,n,m,len,block,t,sum,l,r,k,g;
ll a[MAXN],num[MAXN]; inline ll gcd(ll x,ll y)
{
return y == ? x : gcd(y,x%y);
}
inline bool cmp1(Query a,Query b)
{
return a.l < b.l;
}
inline bool cmp2(Query a,Query b)
{
return a.r < b.r;
}
inline void add(ll l,ll r,ll val)
{
ll i;
for (i = l; i <= r; i++)
{
sum -= num[a[i]] * (num[a[i]] - );
num[a[i]] += val;
sum += num[a[i]] * (num[a[i]] - );
}
} int main()
{ scanf("%lld%lld",&n,&m);
for (i = ; i <= n; i++) scanf("%lld",&a[i]);
for (i = ; i <= m; i++)
{
scanf("%lld%lld",&q[i].l,&q[i].r);
q[i].id = i;
}
sort(q+,q+m+,cmp1);
len = sqrt(n);
block = n / len + (n % len != );
j = ;
for (i = ; i <= block; i++)
{
t = ; sum = ;
while (j <= m && q[j].l > (i - ) * len && q[j].l <= i * len)
{
tmp[++t] = q[j];
j++;
}
memset(num,,sizeof(num));
sort(tmp+,tmp+t+,cmp2);
l = tmp[].l; r = tmp[].l - ;
for (k = ; k <= t; k++)
{
if (l < tmp[k].l) add(l,tmp[k].l-,-);
else if (l > tmp[k].l) add(tmp[k].l,l-,);
add(r+,tmp[k].r,);
l = tmp[k].l; r = tmp[k].r;
ans[tmp[k].id].x = sum;
ans[tmp[k].id].y = (tmp[k].r - tmp[k].l + ) * (tmp[k].r - tmp[k].l);
}
}
for (i = ; i <= m; i++)
{
if (!ans[i].x) printf("0/1\n");
else
{
g = gcd(ans[i].x,ans[i].y);
ans[i].x /= g;
ans[i].y /= g;
printf("%lld/%lld\n",ans[i].x,ans[i].y);
}
}
return ; }

【BZOJ 2038】小Z的袜子的更多相关文章

  1. bzoj 2038 小Z的袜子(hose)(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 11542  Solved: 5166[Sub ...

  2. (原创)BZOJ 2038 小Z的袜子(hose) 莫队入门题+分块

    I - 小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z ...

  3. BZOJ - 2038 小Z的袜子(普通莫队)

    题目链接:小Z的袜子 题意:$n$只袜子,$m$个询问,每次回答有多大概率在$[L,R]$区间内抽到两只颜色相同的袜子 思路:普通莫队,如果两个询问左端点在一个块内,则按询问右端点排序,否则按照所在块 ...

  4. BZOJ 2038 小z的袜子 & 莫队算法(不就是个暴力么..)

    题意: 给一段序列,询问一个区间,求出区间中.....woc! 贴原题! 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过 ...

  5. BZOJ 2038 小Z的袜子(hose) 莫队算法模板题

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题目大意: 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中 ...

  6. BZOJ 2038 小z的袜子(莫队)

    Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...

  7. [BZOJ 2038]小Z的袜子

    传送门:BZOJ 2038 题意很明确,是在给定的区间内任意选取两个数,求选到两个相同的数的概率. 所以我们得首先统计在给定的区间内,相同的数对有多少对,那么这里就使用到了莫队算法.如果对莫队算法还不 ...

  8. BZOJ 2038 小Z的袜子(hose)(分组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2038 题意:给出n个袜子.m个询问,每个询问一个区间[L,R],询问这个区间中任意拿出两 ...

  9. bzoj 2038 小z的袜子 莫队例题

    莫队,利用可以快速地通过一个问题的答案得到另一问题的答案这一特性,合理地组织问题的求解顺序,将已解决的问题帮助解决当前问题,来优化时间复杂度. 典型用法:处理静态(无修改)离线区间查询问题. 线段树也 ...

  10. [bzoj] 2038 小Z的袜子(hose) || 莫队

    原题 给出一个序列,求给定[l,r]内有任意取两个数,有多大概率是一样的 简单的莫队,每次+-当前区间里有的这个颜色的袜子的个数,最后除以(r-l+1)*(r-l)/2即可. 记得约分. #inclu ...

随机推荐

  1. 你必须知道的.net导航

    http://www.cnblogs.com/anytao/archive/2007/09/14/must_net_catalog.html

  2. win10下mysql安装过程中遇到的各种坑

    前几天重装系统,又要下回来mysql,但没想到还是遇到了许多麻烦,翻了十多篇博文才搞定,写个总结出来方便以后不要重复踩坑,也给大家参考参考. 1.下载与安装 这个没什么好说的,下载地址网上一大堆,安装 ...

  3. (转)Webpack2 + Vue2 + Vue-Router2 如何实现懒加载?

    webpack2 的中 System.import 方法将被弃用, 推荐改成以下写法: https://www.mmxiaowu.com/article/5848239bd4352863efb5546 ...

  4. css round corner div and transition

    看stackoverflow上的圆角标签挺好看,自己动手试了下,用的属性是border-radius(即边框圆角半径,用px):加上transition effect,代码如下: <!DOCTY ...

  5. 【转载】Java实现word转pdf

    最近遇到一个项目需要把word转成pdf,GOOGLE了一下网上的方案有很多,比如虚拟打印.给word装扩展插件等,这些方案都依赖于ms word程序,在java代码中也得使用诸如jacob或jcom ...

  6. UVa1585修改版

    #include<stdio.h> int main() { int i,k=-1; char a[100]; while(scanf("%s",&a)!=EO ...

  7. PHP 判断一个字符是否在字符串中

    strpos() - 查找字符串 在另一字符串中 第一次出现的位置(区分大小写) stripos() - 查找字符串 在另一字符串中 第一次出现的位置(不区分大小写) strrpos() - 查找字符 ...

  8. windows端口被占用解决办法

    1.查找端口 netstat -ano | findstr 端口号 2.进程列表并查找相应的进程 tasklist |findstr 进程号 3.杀死进程 taskkill /f /t /im 进程名 ...

  9. 使用awk提取字符串中的数字或字母

    1.提取字符串中的数字 $ echo 'dsFUs34tg*fs5a%8ar%$#@' |awk -F "" ' { for(i=1;i<=NF;i++) { if ($i ...

  10. C语言提高 (7) 第七天 回调函数 预处理函数DEBUG 动态链接库

    链表就是一个结构体 指针指向自身结构体类型 双向链表插入的时候 先改变自身 再改变两边 双向链表删除的时候 先改变两边 再改变自己 逆序一个单向链表 回调函数 指向函数的指针 4链表的遍历回调用法 / ...