[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. python数据类型内置方法

    内容概要 列表内置方法 字典内置方法 字符串转换成字典的方法 eval() 元组内置方法 元组相关笔试题 集合内置方法 列表内置方法 l1 = [2, 4, 5, 7, 3, 9, 0, 6] # 升 ...

  2. Solution -「NOI 2021」「洛谷 P7740」机器人游戏

    \(\mathcal{Description}\)   Link.   自己去读题面叭~ \(\mathcal{Solution}\)   首先,参悟[样例解释 #2].一种暴力的思路即为钦定集合 \ ...

  3. shell脚本批量配置多台主机静态ip

    关于脚本 服务器使用之前,都需要先配置静态IP,那就将这种简单重复的工作,交给脚本来处理吧,让我们运维有更多的时间喝茶看报刷微博 脚本使用 sh ssh.sh ip.txt ssh.sh 为脚本的名称 ...

  4. suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群

    文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...

  5. 内省机制(操作javaBean的信息)

    内省机制(操作javaBean的信息) ----是不是联想到了反射机制了哈,这两者有什么区别呢? 1.内省机制和反射机制的联系 ■ 其实内省机制也是通过反射来实现的,而反射是对一切类都适合去动态获取类 ...

  6. [LeetCode]1528. 重新排列字符串

    给你一个字符串 s 和一个 长度相同 的整数数组 indices . 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置. 返回重新排列后的字符串. 示例 1: ...

  7. 新建一个scrapy项目

    此次是做一个豆瓣的top250信息的抓取 首先打开pycharm 在pycharm的下端的Terminal中输入scrapy startproject douban 此时系统就生成了以下文件(spid ...

  8. BI工具入门:如何做关系数据源的连接?

    ​以往咱们分享的操作步骤都稍微有些复杂,大家跟着步骤操作也有些二丈摸不着头脑,看来简单的操作步骤和功能概念还是有必要普及的,那今天就来说一点简单的入门操作知识,以Smartbi为例子,跟大家说说BI工 ...

  9. 思迈特软件 Smartbi数据查询能力如何?

    随着对BI应用程度的加深,用户需要连接和管理的数据越来越多,也越来越复杂. Smartbi支持丰富的数据源接入,但一般并不能直接使用接入的业务库直接进行数据分析.所以在报表开发前的取数过程,把需要的数 ...

  10. 案例一:shell脚本指定日期减去一天

    如果只减去一天的话,直接写就可以了. #date -d"yesterday 20150401" +%Y%m%d 如果要减去几天,还可以这样写,如果用负数是往前数, #date -d ...