小Z的袜子 hose 2009-国家集训队 bzoj-2038

题目大意:给定一个n个袜子的序列,每个袜子有一个颜色。m次询问:每次询问一段区间中每种颜色袜子个数的平方和。

注释:$1\le n,m\le 5\cdot 10^4$。


想法

莫队算法的第一道例题。

每次左指针和右指针动的时候注意平方即可,

最后,附上丑陋的代码... ...

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. #define N 80050
  8. struct Node
  9. {
  10. int s,t,id;
  11. int ans;
  12. }a[N];
  13. int now;
  14. int n,q,block,pos[N],h[N],c[N];
  15. inline bool cmp1(const Node &x,const Node &y)
  16. {
  17. if(pos[x.s]==pos[y.s]) return x.t<y.t;
  18. return pos[x.s]<pos[y.s];
  19. }
  20. inline bool cmp2(const Node &x,const Node &y)
  21. {
  22. return x.id<y.id;
  23. }
  24. void update(int x,int sig)
  25. {
  26. if(sig==1)
  27. {
  28. now+=h[c[x]];
  29. h[c[x]]++;
  30. }
  31. else
  32. {
  33. now-=h[c[x]]-1;
  34. h[c[x]]--;
  35. }
  36. /*now-=h[c[x]];
  37. h[c[x]]+=sig;
  38. now+=h[c[x]];*/
  39. }
  40. void print(int x)
  41. {
  42. int b=a[x].ans,d=1ll*(a[x].t-a[x].s)*(a[x].t-a[x].s+1)/2;
  43. if(b==0)
  44. {
  45. puts("0/1");return;
  46. }
  47. int gcd=__gcd(b,d);
  48. printf("%d/%d\n",b/gcd,d/gcd);
  49. }
  50. int main()
  51. {
  52. scanf("%d%d",&n,&q);
  53. int i,l,r=0,j;
  54. for(i=1;i<=n;++i) scanf("%d",&c[i]);
  55. if(!n)return 0;
  56. int size=sqrt(n);
  57. block=n/size;
  58. for(i=1;i<=block;++i)
  59. {
  60. l=r+1;
  61. r=i*size;
  62. for(j=l;j<=r;++j)
  63. {
  64. pos[j]=i;
  65. }
  66. }
  67. if(r!=n)
  68. {
  69. l=r+1;
  70. r=n;
  71. block++;
  72. for(i=l;i<=r;++i)
  73. {
  74. pos[i]=block;
  75. }
  76. }
  77. for(i=1;i<=q;++i)scanf("%d%d",&a[i].s,&a[i].t),a[i].id=i;
  78. sort(a+1,a+q+1,cmp1);
  79. for(l=1,r=0,i=1;i<=q;++i)
  80. {
  81. if(a[i].s==a[i].t)
  82. {
  83. a[i].ans=0;
  84. continue;
  85. }
  86. while(l<a[i].s)update(l,-1),l++;
  87. while(l>a[i].s)update(l-1,1),l--;
  88. while(r<a[i].t)update(r+1,1),r++;
  89. while(r>a[i].t)update(r,-1),r--;
  90. a[i].ans=now;
  91. }
  92. sort(a+1,a+q+1,cmp2);
  93. for(i=1;i<=q;i++)
  94. {
  95. print(i);
  96. }
  97. }

小结:莫队真可爱/ka

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

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

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

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

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

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

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

  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. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法】

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

  7. BZOJ 2038: [2009国家集训队]小Z的袜子(hose) 【莫队算法模版】

    任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 题意概括: 有 N 只袜子(分别编号为1~N),有 M 次查询 (L, R)里面随机 ...

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

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2038 解题心得: 第一次接触莫队算法,很神奇,很巧妙.莫队算法主要就是用来解决多次询问时 ...

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

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2038 [题意] 给定一个有颜色的序列,回答若干个询问:区间内任选两个颜色相同的概率. ...

随机推荐

  1. 273 Integer to English Words 整数转换英文表示

    将非负整数转换为其对应的英文表示,给定的输入是保证小于 231 - 1 的.示例:123 -> "One Hundred Twenty Three"12345 -> & ...

  2. RabbitMQ指南之五:主题交换器(Topic Exchange)

    在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息.尽管如此,仍然还有限制:不能基于多个标准进行路由.在我们的日志系统中,我们可能不仅希 ...

  3. Django基础之admin功能

    Django默认开起了后台 1.访问admin后台 2.用户和密码进行登录 ============================================================== ...

  4. Python 将中文转拼音

    文字转拼音 import os.path class PinYin(object): def __init__(self): self.word_dict = {} def load_word(sel ...

  5. tensorboard在windows系统浏览器显示空白的解决

    一个简单的using_tensorboard.py程序,如下: #using_tensorboard.py import tensorflow as tf a = tf.constant(10,nam ...

  6. Struts工作机制

    Struts工作机制? 为什么要使用Struts?工作机制:Struts的工作流程:在web应用启动时就会加载初始化ActionServlet,ActionServlet从struts-config. ...

  7. 处理sql锁死问题

    --SQL Server死锁的查询方法:   exec master.dbo.p_lockinfo 0,0; ---显示死锁的进程,不显示正常的进程   exec master.dbo.p_locki ...

  8. 观察者模式在Foundation框架通知中的应用

    GitHub传送门 1.何为观察者模式? 观察者设计模式定义了对象间的一种一对多的依赖关系,以便一个对象的状态发生变化时,所有依赖于它的对象都得到通知并自动刷新. 举个简单的例子:你和你的舍友都订阅了 ...

  9. 01Struts 2

    Struts 2 Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交 ...

  10. Leetcode724:寻找数组的中心索引(java、python3)

    寻找数组的中心索引 给定一个整数类型的数组 nums,请编写一个能够返回数组"中心索引"的方法. 我们是这样定义数组中心索引的:数组中心索引的左侧所有元素相加的和等于右侧所有元素相 ...