【题目大意】
给出1-N只袜子的颜色,多次询问L-R中选出一双同色袜子的概率。

【思路】

裸莫队。基本的莫队步骤:
①分组(每组大小为根号sqrt(n),共sqrt(n)组)
②排序(左边界分组,右边界在组内按大小排序)
③暴力转移

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<cmath>
  6. using namespace std;
  7. const int MAXN=+;
  8. typedef long long ll;
  9. struct node
  10. {
  11. int l,r,id,pos;
  12. ll ansa,ansb;
  13. };
  14. int n,m,c[MAXN];
  15. ll ans=,s[MAXN];
  16. ll sqr(ll x){return x*x;}
  17. node q[MAXN];
  18.  
  19. ll gcd(ll a,ll b)
  20. {
  21. if (b==) return a;
  22. else return gcd(b,a%b);
  23. }
  24.  
  25. bool cmp(node a,node b)
  26. {
  27. if (a.pos==b.pos) return (a.r<b.r);
  28. else return (a.pos<b.pos);
  29. }
  30.  
  31. bool cmp_id(node a,node b)
  32. {
  33. return (a.id<b.id);
  34. }
  35.  
  36. void update(int x,int delta)
  37. {
  38. ans-=sqr(s[c[x]]);
  39. s[c[x]]+=delta;
  40. ans+=sqr(s[c[x]]);
  41. }
  42.  
  43. void init()
  44. {
  45. memset(s,,sizeof(s));
  46. memset(c,,sizeof(c));
  47. scanf("%d%d",&n,&m);
  48. for (int i=;i<=n;i++) scanf("%d",&c[i]);
  49. int block=int(sqrt(n));
  50. for (int i=;i<m;i++)
  51. {
  52. scanf("%d%d",&q[i].l,&q[i].r);
  53. q[i].id=i;
  54. q[i].pos=(q[i].l-)/block+;
  55. }
  56. sort(q,q+m,cmp);
  57. }
  58.  
  59. void solve()
  60. {
  61. int l=,r=;
  62. s[c[]]=,ans=sqr(s[c[]]);
  63. for (int t=;t<m;t++)
  64. {
  65. for (;r<q[t].r;r++) update(r+,);
  66. for (;r>q[t].r;r--) update(r,-);
  67. for (;l<q[t].l;l++) update(l,-);
  68. for (;l>q[t].l;l--) update(l-,);
  69. if (l==r)
  70. {
  71. q[t].l=;q[t].r=;
  72. continue;
  73. }
  74. q[t].ansa=ans-(r-l+);
  75. q[t].ansb=(ll)(r-l+)*(r-l);
  76. ll minx=min(q[t].ansa,q[t].ansb),maxx=max(q[t].ansa,q[t].ansb);
  77. ll k=gcd(maxx,minx);
  78. q[t].ansa/=k,q[t].ansb/=k;
  79. }
  80. }
  81.  
  82. void print()
  83. {
  84. sort(q,q+m,cmp_id);
  85. for (int i=;i<m;i++) printf("%lld/%lld\n",q[i].ansa,q[i].ansb);
  86. }
  87.  
  88. int main()
  89. {
  90. init();
  91. solve();
  92. print();
  93. return ;
  94. }

【序列莫队】BZOJ2038- [2009国家集训队]小Z的袜子(hose)的更多相关文章

  1. E. XOR and Favorite Number 莫队 2038: [2009国家集训队]小Z的袜子(hose)

    一直都说学莫队,直到现在才学,训练的时候就跪了   T_T,其实挺简单的感觉.其实训练的时候也看懂了,一知半解,就想着先敲.(其实这样是不好的,应该弄懂再敲,以后要养成这个习惯) 前缀异或也很快想出来 ...

  2. BZOJ2038 2009国家集训队 小Z的袜子(hose) 【莫队】

    BZOJ2038 2009国家集训队 小Z的袜子(hose) Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼 ...

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

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

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

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

  5. [bzoj2038][2009国家集训队]小Z的袜子(hose)_莫队

    小Z的袜子 hose 2009-国家集训队 bzoj-2038 题目大意:给定一个n个袜子的序列,每个袜子有一个颜色.m次询问:每次询问一段区间中每种颜色袜子个数的平方和. 注释:$1\le n,m\ ...

  6. bzoj2038: [2009国家集训队]小Z的袜子(hose) [莫队]

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

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

    题目描述 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜子从1到N编号 ...

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

    Brief Description 给定一个序列,您需要处理m个询问,每个询问形如[l,r],您需要回答在区间[l,r]中任意选取两个数相同的概率. Algorithm Design 莫队算法入门题目 ...

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

    神奇的莫队算法,用来解决可离线无修改的区间查询问题: 首先对原序列进行分块,√n块每块√n个: 然后对所有查询的区间[l,r]进行排序,首先按l所在的块序号升序排序,如果一样就按r升序排序: 最后就按 ...

随机推荐

  1. Python 关于时间和日期函数使用 -- (转)

    python中关于时间和日期函数有time和datatime   1.获取当前时间的两种方法: import datetime,time now = time.strftime("%Y-%m ...

  2. esp8266 IOT Demo 固件刷写记录

    将编译好的固件按照下面地址刷写到esp8266 出现下面错误是因为刷写的设置不对,按照图上设置: load 0x40100000, len 26828, room 16 tail 12chksum 0 ...

  3. MFC单文档框架分析及执行流程(转)

    原文转自 https://blog.csdn.net/u011619422/article/details/40402705 首先来分析一下MFC单文档类的结构: 它包括如下几个类: CAboutDl ...

  4. rabbitmq之队列性能测试及优化方法(六)

    前言 下面关注一下rabbitmq实际使用时的性能问题和怎么进行一些优化. 性能测试 针对每个需要生产/消费者与rabbitmq进行通讯的方法进行测试 测试环境 排除网络IO的干扰,采用生产者和消费者 ...

  5. Django【进阶】分页功能Pagination

    项目中,我们需要很多非业务逻辑的功能,例如分页功能,而且此类功能移植性很好,可以在不同的项目中使用,所以整理好这些功能会一定程度上提高开发效率,下面是分页功能代码,使用时,可单独放在utils目录 & ...

  6. io多路复用-select()

    参照<Unix网络编程>相关章节内容,实现了一个简单的单线程IO多路复用服务器与客户端. 普通迭代服务器,由于执行recvfrom则会发生阻塞,直到客户端发送数据并正确接收后才能够返回,一 ...

  7. KVM虚拟机建立快照

    部分转载: http://blog.csdn.net/gg296231363/article/details/6899533 windows虚拟机默认镜像格式为raw,快照默认格式为qcow2.win ...

  8. Linux 入门记录:八、Linux 文件系统

    一.文件系统 操作系统通过文件系统管理文件及数据,磁盘或分区需要创建文件系统之后,才能被操作系统所用,创建文件系统的过程又称之为格式化.没有文件系统的设备又称之为裸设备(raw),某些环境会需要裸设备 ...

  9. centos 挂在ntfs

    Installing build-essentials in CentOS (make, gcc, gdb):http://www.techblogistech.com/2012/03/install ...

  10. pycaffe使用.solverstate文件继续训练

    import caffe solver_file = "solver.prototxt" solverstate = "xx.solverstate" caff ...