[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
题目大意:一个序列,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]作业的更多相关文章
- bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...
- BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]
题意: 询问区间权值在$[a,b]$范围内种类数和个数 莫队 权值分块维护种类数和个数$O(1)-O(\sqrt{N})$ #include <iostream> #include < ...
- BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块
BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...
- [bzoj3809]Gty的二逼妹子序列_莫队_分块
Gty的二逼妹子序列 bzoj-3809 题目大意:给定一个n个正整数的序列,m次询问.每次询问一个区间$l_i$到$r_i$中,权值在$a_i$到$b_i$之间的数有多少个. 注释:$1\le n\ ...
- BZOJ3809: Gty的二逼妹子序列
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方 ...
- [BZOJ3809]Gty的二逼妹子序列[莫队+分块]
题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...
- 2019.01.08 bzoj3809: Gty的二逼妹子序列(莫队+权值分块)
传送门 题意:多组询问,问区间[l,r]中权值在[a,b]间的数的种类数. 看了一眼大家应该都知道要莫队了吧. 然后很容易想到用树状数组优化修改和查询做到O(mnlogamax)O(m\sqrt nl ...
- 【莫队算法】【权值分块】bzoj3809 Gty的二逼妹子序列
如题. #include<cstdio> #include<algorithm> #include<cmath> using namespace std; int ...
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
[BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...
随机推荐
- Solution -「多校联训」种蘑菇
\(\mathcal{Description}\) Link. 给定一棵含有 \(n\) 个结点的树,设 \(S\) 为其中的非空联通子集,求 \[\sum_{S}(\gcd_{u\in S} ...
- linux历史命令审计
一.添加历史命令记录 1.首先在/etc/profile中添加 export HISTORY_FILE=/var/log/Command/Command.log export PROMPT_COMMA ...
- vue如何获取thymeleaf渲染的input值?
写项目时前端用了vue+模板引擎用了thymeleaf,然后有一个输入框取值问题让我很纠结,问题如下: <input class="count-num" type=" ...
- .NET 6学习笔记(1)——通过FileStream实现不同进程对单一文件的同时读写
会写这篇纯属机缘巧合,虽然一直以来认为对单一文件的读.写操作是不冲突,可并行的,但实际并未实践过.正好有个UWP的程序要并行读取由Desktop Extension创建的文本,需要有个原型程序来验证, ...
- pytest--pytest基本介绍
pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高 效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰富 ...
- owasp中国
http://www.owasp.org.cn/OWASP-CHINA/owasp-project/owasp53415927969079c198ce9669-owasp_top_10_privacy ...
- Smartbi代替Alteryx+Tableau,用1份投入如何获得2份回报?
Smartbi是国内一家知名的BI厂商,Alteryx.Tableau是国外两款重要的BI工具,它们都是在BI领域内提供特定的功能,以满足企业的数据分析需求.那么,对于用户来说,在选择BI工具的时候要 ...
- 【基础概念】匹夫细说C#:不是“栈类型”的值类型,从生命周期聊存储位置
转载地址 https://www.cnblogs.com/murongxiaopifu/p/4419040.html 0x00 前言: 匹夫在日常和别人交流的时候,常常会发现一旦讨论涉及到" ...
- maven配置本地仓库和远程仓库
配置本地仓库 修改maven安装目录下conf/settings.xml,也可以在idea配置中覆盖 <localRepository>E:\maven\MavenRepository&l ...
- ansible复习笔记_基础-从零到无
--创建时间:2021年1月25日 --修改时间:2021年3月9日 --作者:飞翔的小胖猪 前言 该文档仅作为作者复习ansible使用,对格式和流程没有做过多的编排和概述.不喜勿喷. 基础 ans ...