【题意】给定n个数字ai,每次询问一个区间中随机抽选两个数字,数字相同的概率,以分数最简形式输出。n,ai<=50000。

【算法】莫队算法

【题解】参考:莫队……讲稿? by Foreseeable

使用莫队算法的关键在于维护区间信息的增减。

对于区间[L,R],令其中数字i的出现次数为xi,则ans=[ ΣC(xi,2) ] / [ C(Σxi,2) ]。

化简可得,ans=Σx^2-(r-l+1)/C(r-l+1,2)

维护A数组表示每个数字出现次数,每次区间移动一格:减,变,加。

异块按左坐标排序,同块按右坐标排序。

莫队别忘了分块

优化:

1.奇偶分块:根据块编号的奇偶性,奇数块内r升序,偶数块内r降序。

2.块大小:block=n/sqrt(m*2/3)。

#include<cstdio>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read(){
int s=,t=;char c;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
const int maxn=;
int n,m,a[maxn],be[maxn],block;
ll c[maxn],sum,ansA[maxn],ansB[maxn];
struct cyc{int l,r,id;}b[maxn];
bool cmp(cyc a,cyc b){return be[a.l]^be[b.l]?a.l<b.l:(be[a.l]&?a.r<b.r:a.r>b.r);}
ll gcd(ll a,ll b){return !b?a:gcd(b,a%b);}
void modify(int x,int p){
//printf("%d %d\n",x,p);
sum-=c[a[x]]*c[a[x]];
c[a[x]]+=p;
sum+=c[a[x]]*c[a[x]];
}
int main(){
n=read();m=read();
for(int i=;i<=n;i++)a[i]=read();
block=(int)(1.0*n/sqrt(1.0*m*/));
for(int i=;i<=n;i++)be[i]=(i-)/block+;
for(int i=;i<=m;i++)b[i].l=read(),b[i].r=read(),b[i].id=i;
sort(b+,b+m+,cmp);
int L=,R=;
sum=;//
for(int i=;i<=m;i++){
for(int j=L-;j>=b[i].l;j--)modify(j,);
for(int j=R+;j<=b[i].r;j++)modify(j,);
for(int j=L;j<=b[i].l-;j++)modify(j,-);
for(int j=R;j>=b[i].r+;j--)modify(j,-);
ll A=sum-(b[i].r-b[i].l+),B=1ll*(b[i].r-b[i].l+)*(b[i].r-b[i].l);
ll g=gcd(A,B);
ansA[b[i].id]=A/g;ansB[b[i].id]=B/g;
L=b[i].l;R=b[i].r;
}
for(int i=;i<=m;i++)printf("%lld/%lld\n",ansA[i],ansB[i]);
return ;
}

【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)的更多相关文章

  1. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) [莫队算法]【学习笔记】

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

  2. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)

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

  3. Bzoj 2038: [2009国家集训队]小Z的袜子(hose) 莫队,分块,暴力

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

  4. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) ( 莫队 )

    莫队..先按sqrt(n)分块, 然后按块的顺序对询问排序, 同块就按右端点排序. 然后就按排序后的顺序暴力求解即可. 时间复杂度O(n1.5) --------------------------- ...

  5. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 分块

    分块大法好 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 Sec  Memory Limit: 259 MB Submit: 2938  Solved: 13 ...

  6. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)【莫队算法裸题&&学习笔记】

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

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose)&&莫对算法

    这里跟曼哈顿最小生成树没有太大的关系. 时间复杂度证明: [BZOJ2038 小Z的袜子 AC代码] 排序方式: 第一关键字:l所在的块: 第二关键字:r从小到大. #include<cstdi ...

  8. 洛谷 P1494 BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

    //洛谷题面字体.排版我向来喜欢,却还没收录这道如此有名的题,BZOJ的题面字体太那啥啦,清橙的题面有了缩进,小标题却和正文字体一致,找个好看的题面咋这么难呐………… //2019年3月23日23:0 ...

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

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

  10. 【刷题】BZOJ 2038 [2009国家集训队]小Z的袜子(hose)

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

随机推荐

  1. Rsyslog初步学习

    一.Rsyslog整体架构 Rsyslog消息流:输入模块——>预处理模块——>主队列——>过滤模块——>执行队列——>输出模块 1. 输入模块 输入模块是消息来源 2. ...

  2. C++ Primer Plus学习:第二章

    C++入门第二章:开始学习C++ 进入C++ 首先,以下是一个C++程序: //myfirst.cpp 显示一行文字 #include<iostream> //预处理器编译指令 int m ...

  3. 关于Filter的一点误解

    之前一直以为请求达到Web应用时,经过过滤器1,过滤器2……,处理后产生响应再经过过滤器n……过滤器2,过滤器1.这样的阐述似乎没有问题,但我的理解却有问题.比如过滤器1的doFilter方法执行了一 ...

  4. 构建一个内网的私有CA步骤

    1:使用openssl命令生成一个私钥,私钥必须放在/etc/pki/CA/private/目录下 (umask 077; openssl genrsa -out /etc/pki/CA/privat ...

  5. jdbc 4.0

    1.存储MySQL数据库的date.time.timestamp.datetime以及year类型数据 package com.rong.jielong; import java.sql.Connec ...

  6. div跟随鼠标移动

    1.目标是实现div跟随鼠标而移动,分三种情况进行实现 a)首先获取div,进行绑定鼠标移动事件,给div开启定位功能 第一种实现方式,假如body的大小跟页面大小一样,则可以用这个方法. 1)获取鼠 ...

  7. Kotlin在处理GET和POST请求的数据问题

    1.网络请求获取到的数据流处理 java写法 BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf-8& ...

  8. CSS自适应导航菜单

    以下是一个简单实例,可以通过学习了解响应工菜单的制作. html <nav class="nav"> <ul> <li class="cur ...

  9. [六]SpringBoot 之 连接数据库(mybatis)

    在进行配置之前首先要了解springboot是如何使用纯java代码方式初始化一个bean的 以前的版本是在xml中使用beans标签,在其里面配置bean,那么纯Java代码怎么实现呢? 答案就是使 ...

  10. 解数独(Python)

    0.目录 1.介绍 2.一些通用函数 3.全局变量(宏变量) 4.数独预处理(约束传播) 5.解数独(深度优先搜索+最小代价优先) 6.主函数 7.总代码 1.介绍 数独是一个非常有趣味性的智力游戏, ...