题目链接   洛古   https://www.luogu.org/problemnew/show/P1494

大概说下自己的理解

先来概率的计算公式   ∑C(2,f(i))  /  C(2,r−l+1)   f(i)是区间每种颜色袜子的数目

最后推出来的式子是 ∑f(i)*f(i)-(r−l+1)/ C(2,r−l+1)  (我也不知道怎么推的.......别人给的);

单纯的暴力就不说了  o(n*n*n);

说下和  o(n*n) 的;

莫队是 o(n*sqrt(n));

o(n*n)的算法 有两种   一是[l,r] 区间里用个小技巧   从头扫到尾   一开始ans=10;

看到第一个 1  我们+0; 看到第二个 1  我们+1; -0;第三1; +3;-1;

每次都   ans1=ans1-sum[a[j]]*(sum[a[j]]-1);   sum[a[j]]++;   ans1=ans1+sum[a[j]]*(sum[a[j]]-1);   莫队也有这个技巧

第二种是区间转移  从[a,b] 到[p, q]  a-〉p  b-q;  按照预先的排序  稍微 比o(n*n) 小一点;

莫队算法

每次区间转移都可能转移  n个数

莫队把(1-n) 分成sqrt块  每块转移       在每块里   最多 sqrt(n)+n  所以最后  sqrt(n)*(n+sqrt(n));

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=5e4+;
int n,m,unit,ans;
int col[maxn],be[maxn],sum[maxn];
struct Mo { int l,r,ID,A,B; }q[maxn];
int S(int x) {return x*x; }
bool cmp(Mo a,Mo b){return be[a.l]==be[b.l]?a.r<b.r:a.l<b.l;}
bool CMP(Mo a,Mo b){return a.ID<b.ID;}
void revise(int x,int add)
{
ans-=S(sum[col[x]]);
sum[col[x]]+=add;
ans+=S(sum[col[x]]);
}
int32_t main()
{
cin>>n>>m; unit=sqrt(n);
for(int i=;i<=n;i++) cin>>col[i],be[i]=i/unit+;
for(int i=;i<=m;i++) cin>>q[i].l>>q[i].r,q[i].ID=i;
sort(q+,q+m+,cmp);
int l=;
int r=;
for(int i=;i<=m;i++)
{
// cout<<q[i].l<<" "<<q[i].r<<endl;
while(l<q[i].l)revise(l,-),l++;
while(l>q[i].l)revise(l-,),l--;
while(r<q[i].r)revise(r+,),r++;
while(r>q[i].r)revise(r,-),r--;
if(q[i].l==q[i].r){q[i].A=;q[i].B=;continue;}
q[i].A=ans-(q[i].r-q[i].l+);
q[i].B=(q[i].r-q[i].l+)*(q[i].r-q[i].l);
int c=__gcd(q[i].A,q[i].B); q[i].A=q[i].A/c; q[i].B=q[i].B/c;
}
sort(q+,q+m+,CMP);
for(int i=;i<=m;i++) printf("%lld/%lld\n",q[i].A,q[i].B);
return ;
}

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

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

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

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

    链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2038 2038: [2009国家集训队]小Z的袜子(hose) Time Limit: 20 ...

  3. BZOJ2038: [2009国家集训队]小Z的袜子(hose) -- 莫队算法 ,,分块

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

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

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

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

    题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=2038 专题练习: http://acm.hust.edu.cn/vjudge/conte ...

  6. kyeremal-bzoj2038-[2009国家集训队]-小z的袜子(hose)-莫队算法

    id=2038">bzoj2038-[2009国家集训队]-小z的袜子(hose) F.A.Qs Home Discuss ProblemSet Status Ranklist Con ...

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

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

  8. 莫队算法 BOJ 2038 [2009国家集训队]小Z的袜子(hose)

    题目传送门 /* 莫队算法:求出[l, r]上取出两只相同袜子的个数. 莫队算法是离线处理一类区间不修改查询类问题的算法.如果你知道了[L,R]的答案,可以在O(1)的时间下得到 [L,R-1]和[L ...

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

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

随机推荐

  1. Spring框架基本代码

    1.准备阶段: 2.基本引入: 接口: package com.xk.spring.kp01_hello; public interface IHello { public void nice(); ...

  2. java接口和抽象类的区别和作用(功能、用途、好处)

    Java接口: 总结了4点关于JAVA中接口存在的意义: 1.重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋 ...

  3. 深入理解java虚拟机---Class文件(二十)

    无符号数.表 当实现了不同语言的编译器,比如jython,jruby等等,那么就可以利用这些语言编写代码,通过各自的编译器编译成符合jvm规范的字节码文件,就可以利用jvm来执行了. Class文件在 ...

  4. css动画库

    转载自:http://www.cnblogs.com/starof/p/4968769.html 本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方 ...

  5. DevExpress v18.1新版亮点——DevExtreme篇(二)

    用户界面套包DevExpress v18.1日前终于正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了DevExtreme JavaScript Controls v18.1 的新功能 ...

  6. dialog销毁不干净与弹出多个dialog问题

    1.关闭dialog的时候不销毁.重新打开然后影响页面的效果与样式. 原因: dialog的close()只是将html片段隐藏,并没有销毁移除. 解决方式: 打开dialog的时候在写onClose ...

  7. Eclipse远程调试Tomcat

    1.Linux服务器中在Tomcat的catalina.sh文件添加如下内容: CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,ad ...

  8. 渲染Web视图

    Spring MVC定义了一个名为ViewResolver的接口 public interface ViewResolver{ View resolveViewName(String viewName ...

  9. verilog实现rgb2gray

    前言 项目算法需求,需要将RGB彩色图像转换为灰度图像,算法原理是很简单的,但是对于刚接触FPGA的宝宝来说,进行时序的设计和调试还是不那么容易的,为了省事儿,就按照上一篇中值滤波(http://ww ...

  10. Java单链表简单实现* @version 1.0

    package com.list; /** * 数据结构与算法Java表示 * @version 1.0 * @author 小明 * */ public class MyLinkedList { p ...