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

题目连接:

http://www.lydsy.com/JudgeOnline/problem.php?id=2038

Descriptionww.co

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

具体来说,小Z把这N只袜子从1到N编号,然后从编号L到R(L 尽管小Z并不在意两只袜子是不是完整的一双,甚至不在意两只袜子是否一左一右,他却很在意袜子的颜色,毕竟穿两只不同色的袜子会很尴尬。

你的任务便是告诉小Z,他有多大的概率抽到两只颜色相同的袜子。当然,小Z希望这个概率尽量高,所以他可能会询问多个(L,R)以方便自己选择。

Input

输入文件第一行包含两个正整数N和M。N为袜子的数量,M为小Z所提的询问的数量。接下来一行包含N个正整数Ci,其中Ci表示第i只袜子的颜色,相同的颜色用相同的数字表示。再接下来M行,每行两个正整数L,R表示一个询问。

Output

包含M行,对于每个询问在一行中输出分数A/B表示从该询问的区间[L,R]中随机抽出两只袜子颜色相同的概率。若该概率为0则输出0/1,否则输出的A/B必须为最简分数。(详见样例)

Sample Input

6 4

1 2 3 3 3 2

2 6

1 3

3 5

1 6

Sample Output

2/5

0/1

1/1

4/15

Hint

题意

题解:

我的第一道莫队算法

具体见http://blog.csdn.net/bossup/article/details/39236275

写的很清楚

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 50010;
  4. int col[maxn],pos[maxn];
  5. long long ans,num[maxn];
  6. long long up[maxn],dw[maxn];
  7. struct query
  8. {
  9. int l,r,id;
  10. }Q[maxn];
  11. bool cmp(query a,query b)
  12. {
  13. if(pos[a.l]==pos[b.l])
  14. return a.r<b.r;
  15. return pos[a.l]<pos[b.l];
  16. }
  17. long long gcd(long long a,long long b)
  18. {
  19. if(b==0)return a;
  20. return gcd(b,a%b);
  21. }
  22. void updata(int x,int d)
  23. {
  24. ans-=num[col[x]]*num[col[x]];
  25. num[col[x]]+=d;
  26. ans+=num[col[x]]*num[col[x]];
  27. }
  28. int main()
  29. {
  30. int n,m;
  31. scanf("%d%d",&n,&m);
  32. int sz =ceil(sqrt(1.0*n));
  33. for(int i=1;i<=n;i++)
  34. {
  35. scanf("%d",&col[i]);
  36. pos[i]=(i-1)/sz;
  37. }
  38. for(int i=1;i<=m;i++)
  39. {
  40. scanf("%d%d",&Q[i].l,&Q[i].r);
  41. Q[i].id = i;
  42. }
  43. sort(Q+1,Q+1+m,cmp);
  44. int pl=1,pr=0;
  45. ans=0;
  46. for(int i=1;i<=m;i++)
  47. {
  48. int id = Q[i].id;
  49. if(Q[i].l==Q[i].r)
  50. {
  51. up[id]=0;
  52. dw[id]=1;
  53. continue;
  54. }
  55. if(pr<Q[i].r)
  56. {
  57. for(int j=pr+1;j<=Q[i].r;j++)
  58. updata(j,1);
  59. }
  60. else
  61. {
  62. for(int j=pr;j>Q[i].r;j--)
  63. updata(j,-1);
  64. }
  65. pr = Q[i].r;
  66. if(pl<Q[i].l)
  67. {
  68. for(int j=pl;j<Q[i].l;j++)
  69. updata(j,-1);
  70. }
  71. else
  72. {
  73. for(int j=pl-1;j>=Q[i].l;j--)
  74. updata(j,1);
  75. }
  76. pl = Q[i].l;
  77. long long aa = ans - Q[i].r + Q[i].l -1;
  78. long long bb = (long long)(Q[i].r-Q[i].l+1)*(Q[i].r-Q[i].l);
  79. long long cc = gcd(aa,bb);
  80. aa = aa/cc,bb = bb/cc;
  81. up[id]=aa,dw[id]=bb;
  82. }
  83. for(int i=1;i<=m;i++)
  84. printf("%lld/%lld\n",up[i],dw[i]);
  85. }

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

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

    二次联通门 : BZOJ 2038: [2009国家集训队]小Z的袜子 /* BZOJ 2038: [2009国家集训队]小Z的袜子 莫队经典题 但是我并不认为此题适合入门.. Answer = ∑ ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. web-ylbtech-数据库备份-数据库设计

    ylbtech-DatabaseDesgin:web-ylbtech-数据库备份-数据库设计 DatabaseName:ylbtech Model:备份 Type:数据库备份设计 Url: 1.A,数 ...

  2. YII 配置文件

    用YIIFramework的库开发 .... Yii::createWebApplication($config); //没有run Yii::import(class1,true),在将class1 ...

  3. 在VMware虚拟机中安装CentOS 7

    [声明] 欢迎转载,但请保留文章原始出处 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3917 ...

  4. 五种情况会导致Session 丢失

    1.Session到期自定丢失.2.当修改web.config 系统会重启  SESSION 会丢失.3.Bin目录有变化时候系统会重启 SESSION会丢失 (这里变化指的是,创建新文件.修改文件名 ...

  5. B.xml

    pre{ line-height:1; color:#1e1e1e; background-color:#f0f0f0; font-size:16px;}.sysFunc{color:#627cf6; ...

  6. 分布式数据库hbase详解

    新霸哥注意到了在人类随着计算机技术的发展,数据的存储量发生了很大的变化,可以用海量来形容,同时,存储的数据类型也是有多种多样的,网页,图片,视频,音频,电子邮件等等,所以在这中情况下以谷歌旗下的Big ...

  7. 图解WPF程序打包全过程

    首先打开已经完成的工程,如图: 下面开始制作安装程序包. 第一步:[文件]——[新建]——[项目]——安装项目. 名称——可以自己根据要求修改. 位置——是指你要制作的安装文件存放在什么目录内,可以根 ...

  8. Hadoop中的辅助类ToolRunner和Configured的用法详解

    在开始学习hadoop时,最痛苦的一件事就是难以理解所写程序的执行过程,让我们先来看这个实例,这个测试类ToolRunnerTest继承Configured的基础上实现了Tool接口,下面对其用到的基 ...

  9. 企业网管软件实战之SolarWinds LANsurveyor

    SolarWinds LANsurveyor是一款比较容易掌握的网络管理软件,他能自动探索你的LAN或WAN,并生成全面的,易于浏览的集成了OSI 2层和 3层 拓扑数据的网络图表.其主要功能有: 1 ...

  10. hdu 5311 Hidden String (BestCoder 1st Anniversary ($))(深搜)

    http://acm.hdu.edu.cn/showproblem.php?pid=5311 Hidden String Time Limit: 2000/1000 MS (Java/Others)  ...