不知道该给这题贴什么标签了,但是这是一道好题
1.注意这道题的询问是满足区间减法的,我们可以把一个询问拆成两个询问离线搞搞,这个思想在后面会见到
2.分类的思想,这道题的求相同余数看似很烦,实际上我们发现每个数只有10^4,不难发现
当p>=100时,我们可以完全不虚的穷举k,k+p*1,k+p*2……,计算每个数出现的次数
当p<100时,我们完全可以直接记录f[p,k]代表到现在出现的次数
因此这题做法就很明显了

  1. type node=record
  2. x,w,p,k:longint;
  3. end;
  4.  
  5. var q:array[..] of node;
  6. a,f2:array[..] of longint;
  7. f1:array[..,..] of longint;
  8. ans:array[..,..] of longint;
  9. mx,j,l,r,p,k,n,m,i,t:longint;
  10.  
  11. procedure swap(var a,b:node);
  12. var c:node;
  13. begin
  14. c:=a;
  15. a:=b;
  16. b:=c;
  17. end;
  18.  
  19. procedure sort(l,r:longint);
  20. var i,j,x:longint;
  21. begin
  22. i:=l;
  23. j:=r;
  24. x:=q[(l+r) shr ].x;
  25. repeat
  26. while q[i].x<x do inc(i);
  27. while x<q[j].x do dec(j);
  28. if not(i>j) then
  29. begin
  30. swap(q[i],q[j]);
  31. inc(i);
  32. dec(j);
  33. end;
  34. until i>j;
  35. if l<j then sort(l,j);
  36. if i<r then sort(i,r);
  37. end;
  38.  
  39. begin
  40. readln(n,m);
  41. for i:= to n do
  42. begin
  43. read(a[i]);
  44. if mx<a[i] then mx:=a[i];
  45. end;
  46. for i:= to m do
  47. begin
  48. readln(l,r,p,k);
  49. inc(t); q[t].p:=p; q[t].k:=k; q[t].x:=r; q[t].w:=i*;
  50. inc(t); q[t].p:=p; q[t].k:=k; q[t].x:=l-; q[t].w:=i*-;
  51. end;
  52. sort(,*m);
  53. t:=;
  54. while q[t].x= do inc(t);
  55. for i:= to n do
  56. begin
  57. inc(f2[a[i]]);
  58. for j:= to do
  59. inc(f1[j,a[i] mod j]);
  60.  
  61. while q[t].x=i do
  62. begin
  63. if q[t].p> then
  64. begin
  65. for j:= to mx div q[t].p do
  66. inc(ans[q[t].w shr +q[t].w mod ,q[t].w mod ],f2[q[t].p*j+q[t].k]);
  67. end
  68. else ans[q[t].w shr +q[t].w mod ,q[t].w mod ]:=f1[q[t].p,q[t].k];
  69. inc(t);
  70. end;
  71. end;
  72. for i:= to m do
  73. writeln(ans[i,]-ans[i,]);
  74. end.

bzoj2506的更多相关文章

  1. 【BZOJ2506】calc 分段+vector+莫队

    [BZOJ2506]calc Description          给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且A ...

  2. [bzoj2506]calc_分块处理

    calc bzoj-2506 题目大意:给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值i的个 ...

  3. [bzoj1552\bzoj2506][Cqoi2014]robotic sort 排序机械臂_非旋转Treap

    robotic sort 排序机械臂 bzoj-1552 bzoj-2506 Cqoi-2014 题目大意:给定一个序列,让你从1到n,每次将[1,p[i]]这段区间反转,p[i]表示整个物品权值第i ...

  4. BZOJ2506: calc

    Description            给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值 ...

  5. 【bzoj2506】calc 根号分治+STL-vector+二分+莫队算法

    题目描述 给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值i的个数. 输入 第一行两个正整数n ...

  6. [转载]hzwer的bzoj题单

    counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...

  7. BZOJ刷题列表【转载于hzwer】

    沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...

随机推荐

  1. c# DataTable 中 Select 和 Clone 用法结合

    C# DataTable是存放数据的一个离线数据库,将数据一下加载到内存. DataTable.Select ()方法: Select();//全部查出来    Select(过滤条件);//根据过滤 ...

  2. Wooden Sticks

    Wooden Sticks Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total ...

  3. KMP的模版实现(以hdu1711为例)

    贴代码,觉得带template的有一些大材小用……不过还是按自己风格写吧! /************************************************************* ...

  4. 简单模拟java动态动态代理机制的底层实现原理

    在网上学习了马士兵老师的设计模式视屏,过程中也有认真的做相应的笔记.在次分享我的一些成果,方便大家的进一步学习. 1.接口  } 2.被代理的对象 public class Tank implemen ...

  5. 通过正则表达式获取url中参数

    url: http://xxxx.com?name=魅力&id=123 js中: var name = getUrlParam("name"); /*通过正则获取url中的 ...

  6. jtemplate使用笔记

    最近的项目中用到了jtemplate, 它是客户端基于javascript的模板引擎,绑定的数据为json对象.以前我在页面上显示数据列表时最喜欢用Repeater控件了,因为它相对与其它几个服务端控 ...

  7. C# partial 说明

    1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用于以下情况: (1) 类型特别大,不宜放在 ...

  8. Oracle 自连接 / 外连接 / 子查询

    --连接查询的三种格式 select ename, deptno,dname from emp natural join dept; select ename, deptno,dname from e ...

  9. querySelector 和 querySelectorAll 的使用

    querySelector 和 querySelectorAll 的使用非常的简单,就像标题说到的一样,它和 CSS 的写法完全一样,对于前端开发人员来说,这是难度几乎为零的一次学习.假如我们有一个 ...

  10. JS判断是否微信浏览器

    JS判断是否微信浏览器 function isWeixinBrowser(){ var ua = navigator.userAgent.toLowerCase(); return (/microme ...