题目链接:https://www.luogu.org/problemnew/show/P1494

题目大意:中文题目

具体思路:计算概率的时候,每一次是区间的移动,每一次移动,记得先将原来的记录的影响去掉,然后再加上新的值,每一次这样统计就可以了。然后计算概率的时候就是C(n,2),总的概率的计算方法,当前的颜色是的个数是t,然后就是C(t,2)。总的概率就是C(r-l+1,2),这里的r-l+1指的是当前要求的区间的长度。所以,合法的区间就是C(t,2)/C(r-l+1,2).

注意特判l==r的情况。

注意在减去原来的值的影响的时候,不能特判当前的值是不是大于2的,打个比方,原来的当前的值出现的是两次,我们先减去1,然后当前的值变成了1,这个时候我们按道理是需要将原来的影响给删掉,如果特判是不是大于等于2的话,就不可能减去了。

AC代码:

 #include<iostream>
#include<stack>
#include<cstring>
#include<iomanip>
#include<stdio.h>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
# define ll long long
const int maxn = 2e5+;
ll a[maxn],vis[maxn];
struct node{
ll l,r,pos,id;
bool friend operator < (node t1,node t2){
if(t1.pos==t2.pos)return t1.r<t2.r;
return t1.pos<t2.pos;
}
}q[maxn];
struct qq{
ll t1,t2;
}ans[maxn];
int main(){
// freopen("hqx.in","r",stdin);
ll n,m;
scanf("%lld %lld",&n,&m);
ll block=(ll)sqrt(n);
for(ll i=;i<=n;i++){
scanf("%lld",&a[i]);
}
for(ll i=;i<=m;i++){
scanf("%lld %lld",&q[i].l,&q[i].r);
q[i].id=i;
q[i].pos=(q[i].l-)/block+;
}
sort(q+,q+m+);
ll tmp=;
ll l=,r=;
for(ll i=;i<=m;i++){
while(l<q[i].l){vis[a[l]]--;
tmp-=(vis[a[l]]+)*vis[a[l]];
tmp+=vis[a[l]]*(vis[a[l]]-);
l++;
}
while(l>q[i].l){l--;vis[a[l]]++;
tmp-=(vis[a[l]]-)*(vis[a[l]]-);
tmp+=vis[a[l]]*(vis[a[l]]-);
}
while(r<q[i].r){
r++;vis[a[r]]++;
tmp-=(vis[a[r]]-)*(vis[a[r]]-);
tmp+=vis[a[r]]*(vis[a[r]]-);
}
while(r>q[i].r){
vis[a[r]]--;
tmp-=(vis[a[r]]+)*(vis[a[r]]);
tmp+=(vis[a[r]]*(vis[a[r]]-));
r--;
}
if(q[i].l==q[i].r){
ans[q[i].id].t1=;
ans[q[i].id].t2=;
continue;
}
ans[q[i].id].t1=tmp;
ans[q[i].id].t2=(q[i].r-q[i].l+)*(q[i].r-q[i].l);
}
for(ll i=;i<=m;i++){
ll tmp=__gcd(ans[i].t1,ans[i].t2);
if(ans[i].t1/tmp>ans[i].t2/tmp)printf("1/1\n");
else
printf("%lld/%lld\n",ans[i].t1/tmp,ans[i].t2/tmp);
}
return ;
}

P1494 [国家集训队]小Z的袜子(莫队)的更多相关文章

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

    P1494 [国家集训队]小Z的袜子 题目描述 作为一个生活散漫的人,小\(Z\)每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小\(Z\)再也无法忍受这恼人的找袜子过程,于是他 ...

  2. BZOJ 2038 [2009国家集训队]小Z的袜子 莫队

    2038: [2009国家集训队]小Z的袜子(hose) 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 Descriptionw ...

  3. BZOJ2038 [2009国家集训队]小Z的袜子 莫队+分块

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

  4. [日常摸鱼]bzoj2038[2009国家集训队]小Z的袜子-莫队算法

    今天来学了下莫队-这题应该就是这个算法的出处了 一篇别人的blog:https://www.cnblogs.com/Paul-Guderian/p/6933799.html 题意:一个序列,$m$次询 ...

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

    题目 P1494 [国家集训队]小Z的袜子 解析 在区间\([l,r]\)内, 任选两只袜子,有 \[r-l+1\choose2\] \[=\frac{(r-l+1)!}{2!(r-l-1)!}\] ...

  6. P1494 [国家集训队]小Z的袜子(luogu)

    P1494 小Z的袜子 终于了解了莫队算法(更专业的名称Square Root Decomposition of Queries) 莫队算法: 一般来说解决静态(实际上也有修改的但复杂度更高)的离线( ...

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

    题目链接:https://www.luogu.com.cn/problem/P1494 一道很经典的莫队模板题,然而每道莫队题的大体轮廓都差不多. 首先莫队是一种基于分块的算法,它的显著特点就是: 能 ...

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

    莫队板子 代码 #include <cstdio> #include <algorithm> #include <cstring> #include <cma ...

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

    题目概述: 小Z把N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬. 你的任务 ...

  10. luogu P1494 [国家集训队]小Z的袜子 ( 普 通 )

    题目:    链接:https://www.luogu.org/problemnew/show/P1494 题意:一些袜子排成一排,每个袜子有固定的颜色.                        ...

随机推荐

  1. 第五节,Neural Networks and Deep Learning 一书小节(中)

    在这一节,我们对上一个程序(Network1.py)进行了优化 3.改进神经网络的学习方法 (1)交叉熵代价函数的引入 Network1程序采用了S型神经元,S型神经元存在一个问题,当输出层神经元的输 ...

  2. Windows Server 2003 添加“Resin”到“服务”出错

    将“Resin”添加到[服务] 进入安装目录,执行 httpd -install 从[服务]移除 执行 httpd -remove ---------------------------------- ...

  3. Unity 着色过程

    图形API包括:OpenGL.Metal.Vulkan.Director3D. 渲染管线(图形管线)通用结构: 1.数据收集(图形的网格.纹理.材质)--------2.顶点着色器(获取图形的2D坐标 ...

  4. logistics回归简单应用——梯度下降,梯度上升,牛顿算法(一)

    警告:本文为小白入门学习笔记 由于之前写过详细的过程,所以接下来就简单描述,主要写实现中遇到的问题. 数据集是关于80人两门成绩来区分能否入学: 数据集: http://openclassroom.s ...

  5. Ajxa用在哪些方面(六)

    Ajax只有在适当的地方才会用到,也即需要在后台进行大量数据处理(充当消息通知机制),需要频繁的定时或不定时从服务器中读取数据的时候.1.比如我们常接触电子邮件系统中,因为电子邮件系统一般都由电子邮件 ...

  6. python: 基本知识(一)

    从今天开始继续python的学习,将应用到到黑客学习中,一边学习黑客知识一边学习python. 1.类:(封装) class T: def  __init__(self,...): //类对象创建后调 ...

  7. linux下测试磁盘的读写IO速度-简易方法

    linux下测试磁盘的读写IO速度-简易方法 参考资料:https://blog.csdn.net/zqtsx/article/details/25487185 一:使用hdparm命令 这是一个是用 ...

  8. Python 排序和numpy排序,得到排序后索引序列(及源list的序列)

    Python list 排序 & np list 排序 nums = [1.25, 0.98, 6.13, 7.62] li = np.array(nums) print(li) out = ...

  9. TPS和QPS的区别和理解【转】

    QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准. TPS:是Transactions ...

  10. 学习笔记——xml的入门及解析

    需求:根据配置文件创建类,并调用方法 分析:1.XML 2.解析XML 3. 根据全限定名创建对象,调用方法 XML: 可扩展的标签语言 作用:存储数据.(主要用于配置文件) 后缀名.xml 书写规范 ...