题目大意

有\(n\)(\(n\leq5*10^4\))个数\(a_1,a_2,...,a_n\)(\(\forall i\in[1,n], 1\leq a_i\leq n\))
\(m\)(\(m\leq5*10^4\))次询问,每次给出区间\([L,R]\),求在\(a_L,a_{L+1},...,a_R\)中随机选两个数,两数相等的概率

题解

设区间\([L,R]\)中,值为\(i\)的数的个数为\(b_i\)
那么答案就是\(\sum_{i=1}^{n}{C_{b_i}^{2}}\)
发现将区间变成\([L+1,R],[L,R+1],[L-1,R],[L,R-1]\)时,维护\(b\)数组的复杂度是\(\Theta(1)\)的
这样就可以用莫队离线解决了

代码
#include<algorithm>
#include<cmath>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<iomanip>
#include<iostream>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define rep(i,x,y) for(register int i=(x);i<=(y);++i)
#define dwn(i,x,y) for(register int i=(x);i>=(y);--i)
#define maxn 50010
#define blo 223
#define LL long long
using namespace std;
int read()
{int x=0,f=1;char ch=getchar();while(!isdigit(ch)&&ch!='-')ch=getchar();if(ch=='-')f=-1,ch=getchar();while(isdigit(ch))x=(x<<1)+(x<<3)+ch-'0',ch=getchar();return x*f;
}
void write(LL x)
{if(x==0){putchar('0');return;}int f=0;char ch[20];if(x<0)putchar('-'),x=-x;while(x)ch[++f]=x%10+'0',x/=10;while(f)putchar(ch[f--]);return;
}
struct que{int l,r,id;}q[maxn];
int nowl,nowr,num[maxn],n,m,a[maxn];
LL ansa[maxn],ansb[maxn],nowans;
LL gcd(LL a,LL b)
{if(a>b)swap(a,b);if(!a)return b;return gcd(b%a,a);
}
bool cmpl(que x,que y){return x.l<y.l;}
bool cmpr1(que x,que y){return x.r<y.r;}
bool cmpr2(que x,que y){return x.r>y.r;}
LL c2(int x){return (LL)x*(LL)(x-1)/2ll;}
int main()
{n=read(),m=read();rep(i,1,n)a[i]=read();rep(i,1,m)q[i].l=read(),q[i].r=read(),q[i].id=i;sort(q+1,q+m+1,cmpl);for(int i=1,s=1,t=1+blo;s<=m;s=t+1,t=s+blo,i){int lim=min(t,m);if(i&1)sort(q+s,q+lim+1,cmpr1);else sort(q+s,q+lim+1,cmpr2);}nowl=1,nowr=0;rep(i,1,m){while(nowr<q[i].r)nowr++,nowans-=c2(num[a[nowr]]),num[a[nowr]]++,nowans+=c2(num[a[nowr]]);while(nowl>q[i].l)nowl--,nowans-=c2(num[a[nowl]]),num[a[nowl]]++,nowans+=c2(num[a[nowl]]);while(nowr>q[i].r)nowans-=c2(num[a[nowr]]),num[a[nowr]]--,nowans+=c2(num[a[nowr]]),nowr--;while(nowl<q[i].l)nowans-=c2(num[a[nowl]]),num[a[nowl]]--,nowans+=c2(num[a[nowl]]),nowl++;if(nowans==0)ansa[q[i].id]=0,ansb[q[i].id]=1;else{ansa[q[i].id]=nowans,ansb[q[i].id]=c2(q[i].r-q[i].l+1);LL gdc=gcd(ansa[q[i].id],ansb[q[i].id]);ansa[q[i].id]/=gdc,ansb[q[i].id]/=gdc;}}rep(i,1,m)write(ansa[i]),putchar('/'),write(ansb[i]),putchar('\n');return 0;
}

转载于:https://www.cnblogs.com/xzyf/p/10391449.html

并不对劲的bzoj2038:p1494:[国家集训队]小Z的袜子相关推荐

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

    P1494 [国家集训队]小Z的袜子 题意: 有一个长度为 n 的序列c[i] .现在给出 m个询问,每次给出两个数l,r ,从编号在 l 到 r 之间的数中随机选出两个不同的数,求两个数相等的概率. ...

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

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

  3. bzoj2038[2009国家集训队]小Z的袜子(hose)

    bzoj2038[2009国家集训队]小Z的袜子(hose) 题意: 把N只袜子从1到N编号,每次求从编号为L到R的袜子中抽两只,有多大的概率抽到颜色相同的袜子. 题解: 不知道要用什么数据结构,但是 ...

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

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

  5. BZOJ2038 : [2009国家集训队]小Z的袜子(hose)(莫队算法)

    2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec Memory Limit: 259 MB Submit: 19269 Solved: 8851 [Sub ...

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

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

  7. [BZOJ2038] [2009国家集训队] 小Z的袜子(hose) (莫队)

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

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

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

  9. bzoj2038: [2009国家集训队]小Z的袜子(hose) 莫队

    Time Limit: 20 Sec Memory Limit: 259 MB Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小 ...

最新文章

  1. 5G/4G:空口帧结构之帧、子帧、时隙、符号、RB。
  2. DevExpress的进度条控件ProgressBarControl的使用-以ZedGraph添加曲线进度为例
  3. 装饰器模式和代理模式的区别
  4. php接口返回一个数组怎末写_php api返回json数组
  5. Memcached服务端自动启动(转载)
  6. MOSS 2010:Visual Studio 2010开发体验(16)——客户端对象模型
  7. anaconda打开python文本编辑器_【python】anaconda中打开IDLE(python 自带编辑器)
  8. python的string与Unicode转换,gbk字符串编码
  9. 汇编常用DOS命令调用
  10. VUE微信开放平台实现网站微信登陆
  11. 关于泊松分布在测序原理中的解释
  12. windows下如何使用配置七牛qshell命令工具
  13. 解决外网与内网或内网之间的通信,NAT穿透
  14. 严正警告!!独处一室的人,请一定不要看文中介绍的URL,未成年也不能看![更新]
  15. (论文阅读笔记)Semantic-Aware Domain Generalized Segmentation
  16. Java封装和多态作业
  17. 云服务器怎么增加d盘_云服务器怎么加d盘
  18. WKWebView 播放下载的本地mp4文件
  19. 君澜酒店集团2019年度待开业“景澜”品牌酒店发布
  20. Java面向对象之接口

热门文章

  1. Unity shader之金属质感衣服
  2. 数列分块入门3(查询前驱)
  3. 笔记:用EXCEL计算收益(复利)
  4. ubuntu16.04搭建ftp服务器
  5. 紫书搜索 例题7-10 UVA - 11212 Editing a Book 迭代加深搜索 IDA*
  6. C#分布式事务(TransactionScope )
  7. Sql Server 监控 Job 执行情况
  8. 服务端命令(dockerd)
  9. none是不是python的保留字_Python主要保留字
  10. k8s的网络优化(metallb)