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

bzoj   bzoj

题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类。

思路:

因为看不出来怎么做,所以考虑莫队。

太懒想写个树状数组但是$n\sqrt{n}log_{n}$太虚

所以将数分块,修改$O(1)$,查询$O(\sqrt{n})$

完结

  1 #include<algorithm>
2 #include<cstdio>
3 #include<cmath>
4 using namespace std;
5 const int N=114514,SN=366;
6 template<typename tp>inline void read(tp &kk){
7 tp ret=0,f=1;char ch=getchar();
8 while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
9 while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
10 kk=ret*f;
11 }
12 int n,m,a[N],bl[N],bs;
13 struct ques
14 {
15 int l,r,x,y,id;
16 bool operator < (const ques &a)const{return bl[l]==bl[a.l]?r<a.r:bl[l]<bl[a.l];}
17 void init(int i){id=i;read(l),read(r),read(x),read(y);}
18 }q[N];
19
20 struct ans
21 {
22 int a1,a2;
23 ans(){a1=a2=0;}
24 }prt[N];
25
26 struct ShangYang
27 {
28 int l[SN],r[SN],buk[SN],bukk[SN],b[N],po[N],sz;
29 void start()
30 {
31 sz=ceil(sqrt(100000));
32 int bb=0;
33 for(int i=1;i<=n;i+=sz)
34 {
35 bb++;
36 l[bb]=i;
37 r[bb]=min(i+sz-1,n);
38 for(int j=l[bb];j<=r[bb];j++) b[j]=bb;
39 }
40 }
41 void add(int x)
42 {
43 if(!po[x]) bukk[b[x]]++;
44 po[x]++;
45 buk[b[x]]++;
46 }
47 void mus(int x)
48 {
49 po[x]--;
50 buk[b[x]]--;
51 if(!po[x]) bukk[b[x]]--;
52 }
53 ans query(int x,int y)
54 {
55 ans ret;
56 int bx=b[x],by=b[y];
57 if(bx==by)
58 {
59 for(int i=x;i<=y;i++)
60 ret.a1+=po[i],ret.a2+=(!!po[i]);
61 }else
62 {
63 for(int i=bx+1;i<by;i++)
64 ret.a1+=buk[i],ret.a2+=bukk[i];
65 for(int i=x;i<=r[bx];i++)
66 ret.a1+=po[i],ret.a2+=(!!po[i]);
67 for(int i=l[by];i<=y;i++)
68 ret.a1+=po[i],ret.a2+=(!!po[i]);
69 }
70 return ret;
71 }
72 }sy;
73
74 void icu()
75 {
76 int l=1,r=0;
77 for(int i=1;i<=m;i++)
78 {
79 while(r<q[i].r) sy.add(a[++r]);
80 while(l>q[i].l) sy.add(a[--l]);
81 while(r>q[i].r) sy.mus(a[r--]);
82 while(l<q[i].l) sy.mus(a[l++]);
83 prt[q[i].id]=sy.query(q[i].x,q[i].y);
84 }
85 }
86
87 int main()
88 {
89 read(n),read(m);
90 bs=ceil(sqrt(n));
91 for(int i=1;i<=n;i++) read(a[i]),bl[i]=(i-1)/bs+1;
92 for(int i=1;i<=m;i++) q[i].init(i);
93 // puts("114514");
94 sy.start();
95 sort(q+1,q+1+m);
96 icu();
97 // puts("1919810");
98 for(int i=1;i<=m;i++) printf("%d %d\n",prt[i].a1,prt[i].a2);
99 return 0;
100 }

[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业的更多相关文章

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

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

  2. BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]

    题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...

  3. BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块

    BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...

  4. [bzoj3809]Gty的二逼妹子序列_莫队_分块

    Gty的二逼妹子序列 bzoj-3809 题目大意:给定一个n个正整数的序列,m次询问.每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个. 注释:$1\le n\ ...

  5. BZOJ3809: Gty的二逼妹子序列

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

  6. [BZOJ3809]Gty的二逼妹子序列[莫队+分块]

    题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...

  7. 2019.01.08 bzoj3809: Gty的二逼妹子序列(莫队+权值分块)

    传送门 题意:多组询问,问区间[l,r]中权值在[a,b]间的数的种类数. 看了一眼大家应该都知道要莫队了吧. 然后很容易想到用树状数组优化修改和查询做到O(mnlogamax)O(m\sqrt nl ...

  8. 【莫队算法】【权值分块】bzoj3809 Gty的二逼妹子序列

    如题. #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int ...

  9. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

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

随机推荐

  1. JS的一些对象

    JS是基于对象的语言.当然此时都说是面向对象的语言. 类:模板,原型对象    对象:具体的实例 原型对象: var user = { name:"xiaoxiao", age:5 ...

  2. Realtime Data Processing at Facebook

    概要 这篇论文发表于2016年,主要是介绍Facebook内部的流式计算平台的设计与思考,对于流式计算的关键特性的实现选型上进行深度对比分析. 流式计算系统5个衡量指标 文中提到有5个重要的考量部分 ...

  3. Eureka Server启动过程

    前面对Eureka的服务端及客户端的使用均已成功实践,对比Zookeeper注册中心的使用区别还是蛮大的: P:分区容错性(⼀定的要满⾜的)C:数据⼀致性 A:⾼可⽤:CAP不可能同时满⾜三个,要么是 ...

  4. Java NIO Selector 的使用

    之前的文章已经把 Java 中 NIO 的 Buffer.Channel 讲解完了,不太了解的可以先回过头去看看.这篇文章我们就来聊聊 Selector -- 选择器. 首先 Selector 是用来 ...

  5. JSP中引入JQuery和Layer,浏览器控制台报错404

    路径没有写错,文件也存在为什么会报404呢?,解决方法是将layer文件夹使用source的方式 解决办法: 这时候你会发现layer文件夹变成了蓝色,重启一次服务器,页面中就没有报404异常了 总结 ...

  6. 认识 LLVM

    简介 LLVM是一套提供编译器基础设施的开源项目,是用 C++ 编写,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端.它是为了任意一种编程语言而写成的程序,利用虚拟技术创造出编译时期. ...

  7. [数分笔记]Dedekind切割定理的证明

    1.定理内容 Dedekind切割定理:设是实数集的一个切割,则或者有最大数,或者有最小数. 2.证明过程 设是中所有有理数所构成的集合,是中所有有理数所构成的集合 从而构成一个有理数集的切割 有三种 ...

  8. 使用windows自带linux子系统开发esp32

    步骤: 1.打开windows商店,搜索ubuntu,安装18.04版本. 2.控制面板 /程序和功能 /打开或关闭windows功能 3.关机重启 4.打开刚安装得ubuntu,设置用户名和密码. ...

  9. C#控制打印机打印

    一.引用BarcodeStandard.dll #region BarcodeStandard.dll /* * * 使用说明 需要通过NuGet进行安装BarcodeLib.dll,必不可少 */ ...

  10. 探索TiDB Lightning的源码来解决发现的bug

    背景 上一篇<记一次简单的Oracle离线数据迁移至TiDB过程>说到在使用Lightning导入csv文件到TiDB的时候发现了一个bug,是这样一个过程. Oracle源库中表名都是大 ...