题面:

传送门

思路:

又是一道标准的莫队处理题目,但是这道题需要一点小改动:求个数变成了求概率

我们思考:每次某种颜色从i个增加到i+1个,符合要求的情况多了多少?

原来的总情况数是i*(i-1)/2,现在是i*(i+1)/2,实际上就是增加了i个!

所以我们只要把对答案tot的更改变成加i即可

莫队学习请戳这里:莫队

Code:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define ll long long
using namespace std;
inline ll read(){
ll re=,flag=;char ch=getchar();
while(ch>''||ch<''){
if(ch=='-') flag=-;
ch=getchar();
}
while(ch>=''&&ch<='') re=(re<<)+(re<<)+ch-'',ch=getchar();
return re*flag;
}
ll n,m,cnt[],tot=,x[],curl,curr,block;
ll sqr[],ans[],bot[];
struct query{
ll l,r,i;
}a[];
bool cmp(query l,query r){
if(l.l/block!=r.l/block) return (l.l/block)<(r.l/block);
else return l.r<r.r;
}
void add(ll i){
cnt[x[i]]++;tot+=sqr[cnt[x[i]]]-sqr[cnt[x[i]]-];
//cout<<"add "<<i<<" "<<x[i]<<" "<<cnt[x[i]]<<"\n";
}
void erase(ll i){
cnt[x[i]]--;tot+=sqr[cnt[x[i]]]-sqr[cnt[x[i]]+];
//cout<<"erase "<<i<<" "<<x[i]<<" "<<cnt[x[i]]<<"\n";
}
void init(){
for(ll i=;i<=n;i++) sqr[i]=i*(i-);
}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
int main(){
ll i;ll tmp,t1,t2;
n=read();m=read();for(i=;i<=n;i++) x[i]=read();block=sqrt(n);
init();
for(i=;i<=m;i++) a[i].l=read(),a[i].r=read(),a[i].i=i;
sort(a+,a+m+,cmp);curl=a[].l;curr=a[].r;
for(i=a[].l;i<=a[].r;i++) add(i);
ans[a[].i]=tot;bot[a[].i]=(a[].r-a[].l)*(a[].r-a[].l+);
if(a[].l==a[].r) bot[a[].i]=;
for(i=;i<=m;i++){
while(curl<a[i].l) erase(curl++);
while(curl>a[i].l) add(--curl);
while(curr<a[i].r) add(++curr);
while(curr>a[i].r) erase(curr--);
ans[a[i].i]=tot;bot[a[i].i]=(a[i].r-a[i].l)*(a[i].r-a[i].l+);
if(a[i].l==a[i].r) bot[a[i].i]=;
//cout<<"now "<<tot<<" "<<a[i].l<<" "<<a[i].r<<"\n";
}
for(i=;i<=m;i++){
if(ans[i]==) printf("0/1\n");
else{
tmp=gcd(bot[i],ans[i]);
//cout<<"gcd "<<tmp<<" "<<ans[i]<<" "<<bot[i]<<"\n";
t1=ans[i]/tmp;t2=bot[i]/tmp;
printf("%lld/%lld\n",t1,t2);
}
}
}

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

  1. 【bzoj2038】[国家集训队2010]小Z的袜子 莫队

    莫队:就是一坨软软的有弹性的东西Duang~Duang~Duang~ 为了防止以左端点为第一关键字以右端点为第二关键字使右端点弹来弹去,所以让左端点所在块为关键字得到O(n1.5)的时间效率,至于分块 ...

  2. BZOJ2038 小Z的袜子 莫队

    BZOJ2038 题意:q(5000)次询问,问在区间中随意取两个值,这两个值恰好相同的概率是多少?分数表示: 感觉自己复述的题意极度抽象,还是原题意有趣(逃: 思路:设在L到R这个区间中,x这个值得 ...

  3. 【填坑向】bzoj2038小Z的袜子 莫队

    学莫队必做题,,,但是懒得写.今天来填个坑 莫队水题 莫队实际上就是按一个玄学顺序来离线计算询问,保证复杂度只会多一个n1/2,感觉是玄学(离线算法都很玄学) 易错点:要开long long(卡我半天 ...

  4. BZOJ2038 小Z的袜子(莫队之源)

    题意+思路: 给你m个区间询问,问每个区间内的$\displaystyle \frac{\sum x^2-(R-L+1)}{(R-L)(R-L+1)} $,其中x为每种数字的个数,用cnt存储: 所以 ...

  5. AC日记——[国家集训队2010]小Z的袜子 cogs 1775

    [国家集训队2010]小Z的袜子 思路: 传说中的莫队算法(优雅的暴力): 莫队算法是一个离线的区间询问算法: 如果我们知道[l,r], 那么,我们就能O(1)的时间求出(l-1,r),(l+1,r) ...

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

    1775. [国家集训队2010]小Z的袜子 ★★★   输入文件:hose.in   输出文件:hose.out   简单对比时间限制:1 s   内存限制:512 MB [题目描述] 作为一个生活 ...

  7. 「国家集训队」小Z的袜子

    「国家集训队」小Z的袜子 传送门 莫队板子题. 注意计算答案的时候,由于分子分母都要除以2,所以可以直接约掉,这样在开桶算的时候也方便一些. 参考代码: #include <algorithm& ...

  8. 小Z的袜子 & 莫队

    莫队学习 & 小Z的袜子 引入 莫队 由莫涛巨佬提出,是一种离线算法 运用广泛 可以解决广大的离线区间询问题 莫队的历史 早在mt巨佬提出莫队之前 类似莫队的算法和莫队的思想已在Codefor ...

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

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

随机推荐

  1. elasticsearch RestHighLevelClient 使用方法及封装工具

    目录 EsClientRHL 更新日志 开发原因: 使用前你应该具有哪些技能 工具功能范围介绍 工具源码结构介绍 开始使用 未来规划 git地址:https://gitee.com/zxporz/ES ...

  2. 如何让图片相对于上层DIV始终保持水平、垂直都居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. [C++]#if !defined 的作用

    当你用VC的菜单新增一个类,你会发现自动生成的代码总是类似下面的样子: #if !defined(AFX_XXXX__INCLUDED_) #define  AFX_XXXX__INCLUDED_ 具 ...

  4. Cobbler自动安装的Linux系统ssh无法进入

    Linux ssh登陆老提示“permission denied,please try again” ,但是iptables已经关掉了 修改/etc/ssh/sshd_config文件.找如下的一句 ...

  5. java常用 开源

    http://sourceforge.nethttp://code.google.com/hosting/http://www.open-open.com/code/tags/Javahttp://w ...

  6. iOS开发——应用间跳转

    iOS开发过程中,我们经常碰到应用间跳转的情景: 1.使用第三方用户登录,跳转到需授权的App或跳转到分享app的对应页面 *需要用户授权,还需要"返回到调用的程序,同时返回授权的用户名.密 ...

  7. scrapy使用流程

    安装:通过pip install scrapy即可安装 在ubuntu上安装scrapy之前,需要先安装以下依赖:sudo apt-get install python3-dev build-esse ...

  8. 八、MySQL 数据类型

    MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 数值类型 MySQL支持所有标准S ...

  9. 认识/etc/passwd和/etc/shadow

    认识/etc/passwd和/etc/shadow============================== /etc/passwd [root@aminglinux ~]# head -n1 /e ...

  10. php订单号的生成

    来自ECSHOP订单号生成函数:/includes/lib_order.php文件中的get_order_sn() /** * 得到新订单号 * @return string */ function ...