题面:

传送门

思路:

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

我们思考:每次某种颜色从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. Optional int parameter 'fundID' is present but cannot be translated into a null value due to being declared as a primitive type

    错误的意思是: "可选的int参数'fundID'存在但由于被声明为基本类型而无法转换为空值" 意思是fundID被申明为int的基本数据类型, 不能转换为字符串的null值. 难 ...

  2. iOS常用第三方类库 Xcode插件

    第三方类库(github地址): 1.AFNetworking 网络数据     https://github.com/AFNetworking/AFNetworking 2.SDWebImage 图 ...

  3. Java 对数组的筛选

    在Java里面 一般对一个数组进行筛选,去剔除一些元素,一般做法是用临时数组来存储,把符合条件的元素加入到新数组中,虽然数组有移除的方法但是 是线程不安全的: 而用迭代器Iterator,可以在遍历的 ...

  4. jsp页面:一个form,不同请求提交form

    需求:一个表单中有一个请求 action="url"发送数据地址: 在表单外有一个请求,请求form表单提交的数据 我们用js来写:通过每次请求传不同的action=url; 例如 ...

  5. Java代码随机生成图片验证码

    package com.rchm.util.images; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2 ...

  6. 日期增加天数--JS Date

    //日期加天数的方法 //dataStr日期字符串 //dayCount 要增加的天数 //return 增加n天后的日期字符串 function dateAddDays(dataStr,dayCou ...

  7. H5各种头部meta标签的功能

    <!DOCTYPE html>  H5标准声明,使用 HTML5 doctype,不区分大小写 <head lang=”en”> 标准的 lang 属性写法 <meta ...

  8. MySQL批量插入大量数据方法

    在MySQL数据库中,如果要插入上百万级的记录,用普通的insert into来操作非常不现实,速度慢人力成本高,推荐使用Load Data或存储过程来导入数据,我总结了一些方法分享如下,主要基于My ...

  9. 42.VUE学习之--组件之子组件使用$on与$emit事件触发父组件实现购物车功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 51NOD 1128正整数分组V2 二分答案

    这道题是典型的二分答案法.但是首先难道这道题的时候我进行了一系列的思考,甚至联想到了之前多校中类似于树状划分的问题...原因是大家都包括N各节点K个输入.. 实际上最开始联想到了应当使用二分法“枚举” ...