题意:在[l, r]之中任选两个数,求它们相同的概率。

解:

莫队入门。

概率这个很好搞,就是cnt * (cnt - 1) / 2。

然后发现每次挪指针的时候,某一个cnt会+1或-1。这时候差值就是2 * cntsmall

 #include <cstdio>
#include <algorithm>
#include <cmath> typedef long long LL;
const int N = ; int a[N], bin[N], fr[N];
LL ans; struct ASK {
int id, l, r;
LL ans;
inline bool operator <(const ASK &w) const {
if(fr[l] != fr[w.l]) {
return fr[l] < fr[w.l];
}
return r < w.r;
}
}ask[N]; inline bool cmp(const ASK &a, const ASK &b) {
return a.id < b.id;
} inline LL gcd(LL a, LL b) {
if(!b) {
return a;
}
return gcd(b, a % b);
} inline void add(int x) {
ans += bin[a[x]] << ;
bin[a[x]]++;
return;
} inline void del(int x) {
bin[a[x]]--;
ans -= bin[a[x]] << ;
} int main() {
int n, m;
scanf("%d%d", &n, &m);
int T = sqrt(n);
for(int i = ; i <= n; i++) {
scanf("%d", &a[i]);
fr[i] = (i - ) / T + ;
}
for(int i = ; i <= m; i++) {
ask[i].id = i;
scanf("%d%d", &ask[i].l, &ask[i].r);
}
std::sort(ask + , ask + m + ); int L = , R = ;
bin[a[]]++;
for(int i = ; i <= m; i++) {
if(ask[i].l == ask[i].r) {
continue;
}
while(ask[i].l < L) {
add(--L);
}
while(R < ask[i].r) {
add(++R);
}
while(L < ask[i].l) {
del(L++);
}
while(ask[i].r < R) {
del(R--);
}
ask[i].ans = ans;
} std::sort(ask + , ask + m + , cmp);
for(int i = ; i <= m; i++) {
if(!ask[i].ans || ask[i].l == ask[i].r) {
puts("0/1");
continue;
}
int g = gcd(ask[i].ans, 1ll * (ask[i].r - ask[i].l + ) * (ask[i].r - ask[i].l));
printf("%lld/%lld\n", ask[i].ans / g, 1ll * (ask[i].r - ask[i].l + ) * (ask[i].r - ask[i].l) / g);
}
return ;
}

AC代码

洛谷P1494 小Z的袜子的更多相关文章

  1. Bzoj2038/洛谷P1494 小Z的袜子(莫队)

    题面 Bzoj 洛谷 题解 考虑莫队算法,首先对询问进行分块(分块大小为\(sqrt(n)\)),对于同一个块内的询问,按照左端点为第一关键字,右端点为第二关键字排序.我们统计这个区间内相同的颜色有多 ...

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

    正解:莫队 解题报告: 这是,传送门qwq 昂大概是莫队板子题? 首先可以推出来答案是(∑C(2,color[i]))/C(2,r-l+1)趴?挺显然的不解释了qwq 然后显然除数直接做就成,考虑怎么 ...

  3. P1494 小Z的袜子

    P1494 小Z的袜子 莫队板子题,对询问进行排序+分块,从而得到巧妙的复杂度 对于L,R的询问. 设其中颜色为x,y,z的袜子的个数为a,b,c... 那么答案即为 (a*(a-1)/2+b*(b- ...

  4. 洛谷 2186 小Z的栈函数

    https://www.luogu.org/problem/show?pid=2186 题目描述 小Z最近发现了一个神奇的机器,这个机器的所有操作都是通过维护一个栈来完成的,它支持如下11个操作: N ...

  5. 洛谷——P2117 小Z的矩阵

    P2117 小Z的矩阵 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余 ...

  6. 洛谷P2188 小Z的 k 紧凑数

    P2188 小Z的 k 紧凑数 题目描述 小 Z 在草稿纸上列出了很多数,他觉得相邻两位数字差的绝对值不超过 k 的整数特别奇特,称其为 k 紧凑数. 现在小 Z 想知道 [l,r] 内有多少个 k ...

  7. 洛谷—— P2117 小Z的矩阵

    https://www.luogu.org/problemnew/show/2117 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1 ...

  8. 洛谷 P2117 小Z的矩阵

    P2117 小Z的矩阵 题目描述 小Z最近迷上了矩阵,他定义了一个对于一种特殊矩阵的特征函数G.对于N*N的矩阵A,A的所有元素均为0或1,则G(A)等于所有A[i][j]*A[j][i]的和对2取余 ...

  9. [洛谷P2186] 小Z的栈函数

    题目链接: 传送门 题目分析: 大模拟,先得存操作,然后再处理每个数-- 有一个小优化,在处理操作的时候顺便判一下最后栈里是不是有且仅有一个数,但A完了才想起来,所以就算了-- 总之就是个模拟题--没 ...

随机推荐

  1. AngularJS路由使用案例

    AngularJS路由使用案例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...

  2. 反射获取Class对象

    实际演示

  3. Day 6-3 粘包现象

    服务端: import socket import subprocess phone = socket.socket(family=socket.AF_INET, type=socket.SOCK_S ...

  4. spring boot+mybatis+generator生成domain大小写问题

    之前遇到一个问题,用generator生成数据库对应的domain,以前都是好好的,那天突然生成的domain都是小写的,因为我数据库里是大写的,后来找到解决办法, <table tableNa ...

  5. JQ获取URL中是否含有某个字符的话,对页面进行某种操作

    一.//JQ获取URL中是否含有某个字符的话,对页面进行某种操作 例:如果URL中含有xia的字符,就在页面引入一个cssvar str=window.location.href; //获取地址栏UR ...

  6. Python2基础

    1.python 3.python函数 python的函数定义: 以def关键字定义一个函数: 参数放在小括号里面: 必须有return语句: 关键字参数: 即调用函数时传参顺序可以人为指定 默认参数 ...

  7. ES 6 系列 - 赋值的新方式:解构赋值

    变量的解构赋值 es 6 允许按照一定的模式,从数组和对象中提取值,然后对变量进行赋值,这被称之为解构: 一.数组的解构赋值 最基本写法: let [a, b, c] = [1, 2, 3]; a / ...

  8. Software License Manager

    slmgr -ilc lenovo.xrm-ms slmgr -ipk lenovo-lenovo-lenovo-lenovo-lenovo

  9. 转载:实现MATLAB2016a和M文件关联

    转载自http://blog.csdn.net/qq_22186119 新安装MATLAB2016a之后,发现MATLAB没有和m文件关联 每次打开m文件后都会重新打开一次MATLAB主程序 后来发现 ...

  10. Running Web API using Docker and Kubernetes

    Context As companies are continuously seeking ways to become more Agile and embracing DevOps culture ...