题意:

询问区间权值在$[a,b]$范围内种类数和个数


莫队

权值分块维护种类数和个数$O(1)-O(\sqrt{N})$

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. using namespace std;
  7. #define pii pair<int, int>
  8. #define MP make_pair
  9. #define fir first
  10. #define sec second
  11. typedef long long ll;
  12. const int N=1e5+, M=1e6+, BN=, BS=;
  13. inline int read(){
  14. char c=getchar();int x=,f=;
  15. while(c<''||c>''){if(c=='-')f=-; c=getchar();}
  16. while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
  17. return x*f;
  18. }
  19.  
  20. int n, Q, a[N], l, r, x, y;
  21. struct _blo{int l, r;} b[BN];
  22. int block, m, pos[N];
  23. struct Block{
  24. inline void ini(){
  25. block=sqrt( n );
  26. m=(n-)/block+;
  27. for(int i=; i<=n; i++) pos[i]=(i-)/block+;
  28. for(int i=; i<=m; i++) b[i].l=(i-)*block+, b[i].r=i*block; b[m].r=n;
  29. }
  30. int kind[BS], c[N], sum[BS];
  31. inline void add(int v) {
  32. c[v]++; sum[pos[v]]++;
  33. if(c[v]==) kind[pos[v]]++;
  34. }
  35. inline void del(int v) {
  36. c[v]--; sum[pos[v]]--;
  37. if(c[v]==) kind[pos[v]]--;
  38. }
  39. pii que(int l,int r) {
  40. int pl=pos[l], pr=pos[r], ans1=, ans2=;
  41. if(pl==pr) for(int i=l; i<=r; i++) ans1+=c[i], ans2+= c[i]>;
  42. else{
  43. for(int i=pl+; i<pr; i++) ans1+=sum[i], ans2+= kind[i];
  44. for(int i=l; i<=b[pl].r; i++) ans1+=c[i], ans2+= c[i]>;
  45. for(int i=b[pr].l; i<=r; i++) ans1+=c[i], ans2+= c[i]>;
  46. }
  47. return MP(ans1, ans2);
  48. }
  49. }B;
  50.  
  51. struct meow{
  52. int l, r, x, y, qid;
  53. bool operator <(const meow &a) const{return pos[l]==pos[a.l] ? r<a.r : pos[l]<pos[a.l];}
  54. }q[M];
  55. pii ans[M];
  56. void modui(){
  57. int l=, r=;
  58. for(int i=; i<=Q; i++){
  59. while(r<q[i].r) r++, B.add(a[r]);
  60. while(r>q[i].r) B.del(a[r]), r--;
  61. while(l<q[i].l) B.del(a[l]), l++;
  62. while(l>q[i].l) l--, B.add(a[l]);
  63. ans[q[i].qid]= B.que(q[i].x, q[i].y);
  64. }
  65. }
  66.  
  67. int main() {
  68. freopen("in","r",stdin);
  69. n=read(); Q=read();
  70. for(int i=; i<=n; i++) a[i]=read();
  71. for(int i=; i<=Q; i++) l=read(), r=read(), x=read(), y=read(), q[i]=(meow){l, r, x, y, i};
  72. B.ini();
  73. sort(q+, q++Q);
  74. modui();
  75. for(int i=; i<=Q; i++) printf("%d %d\n",ans[i].fir, ans[i].sec);
  76. }

BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]的更多相关文章

  1. bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块

    题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...

  2. [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业

    [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj   bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...

  3. BZOJ 3809: Gty的二逼妹子序列

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1387  Solved: 400[Submit][Status][Di ...

  4. Bzoj 3809: Gty的二逼妹子序列 莫队,分块

    3809: Gty的二逼妹子序列 Time Limit: 35 Sec  Memory Limit: 28 MBSubmit: 868  Solved: 234[Submit][Status][Dis ...

  5. BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块

    Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...

  6. BZOJ 3809 Gty的二逼妹子序列(莫队+分块)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3809 [题目大意] 给定一个长度为n(1<=n<=100000)的正整数序 ...

  7. [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列

    \(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...

  8. bzoj 3809 Gty的二逼妹子序列 —— 莫队+分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809 据说一开始应该想到莫队+树状数组,然而我想的却是莫队+权值线段树... 如果用权值线段 ...

  9. bzoj 3809 Gty的二逼妹子序列——莫队+分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809 容易想到树状数组维护值域.但修改和查询都是 log 太慢. 考虑有 nsqrt(n) ...

随机推荐

  1. Oil Deposits(dfs水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241 Oil Deposits Time Limit: 2000/1000 MS (Java/Othe ...

  2. dede的pagelist标签的listsize数字属性详解

    转载▼http://blog.sina.com.cn/s/blog_a4f3bd4e01012c8n.html dede的pagelist标签的listsize数字属性详解.见远seo经常用织梦搭建各 ...

  3. Dede 删除文档同时文章中的图片的方法

    首先,在"/include"目录下建立"extend.func.php"文件. 然后,将以下内容保存在"extend.func.php"文件 ...

  4. JAVA WEB之Spring4.x JdbcTemplate

    jdbcTemplate 说白了,他就是Spring提供用于简化数据库访问的类 基本jdbc驱动访问数据库 /* 一个简易好用的数据库连接和访问类 */ package cslg.cn.control ...

  5. 2017年 JavaScript 框架回顾 -- 后端框架

    本文是2017年 JavaScript 框架回顾系列的最后的一篇文章,主要介绍 JavaScript 的后端框架情况. 从上图中可以看到,Express 作为用 JavaScript 编写的后端服务的 ...

  6. 有关linux下redis overcommit_memory的问题

    公司的几台Redis服务器出现不明故障,查看Redis日志,发现如下提示: 1 [34145] 01 Jan 17:42:02 # WARNING overcommit_memory is set t ...

  7. mysql根据汉字首字母排序[转]

    select  areaName  from area order by   convert(areaName USING gbk)   COLLATE   gbk_chinese_ci asc 说明 ...

  8. python3 第十八章 - 迭代器与生成器

    1.迭代器(Iterator) 迭代是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退. 迭代器 ...

  9. js_8_dom标签

    创:9_3_2017  星期4 修: 对于在a标签中,如何阻止跳转? 定义一个事件,事件顺序执行后才执行跳转,如果事件函数返回false,则后面事件就不触发 事件1 = "return 函数 ...

  10. js swipeDelete 滑动删除

    先上图看看整体实际效果 看看用法 与参数 默认参数 var defaults = { distance:80, //滑动距离 units:'px', //默认单位 touchStart:functio ...