[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 ...
随机推荐
- 网页外部注入vConsole调试
概要 本篇介绍一种十分方便的方法为网站添加 vConsole 调试(通过篡改请求外部注入的方式,不需要您是网站的拥有者,主要用于调试线上站点). 之前已经发过一篇<借助FreeHttp为任意 ...
- MongoDB 带访问控制的副本集部署
当你需要用到一个MongoDB 副本集集群,用于开发测试时, 可以通过下面的步骤简单完成. 版本及环境 MongoDB4.4 Centos6.5 一. 下载安装 MongoDB Server 及 ...
- Linux性能优化实战CPU篇之总结(四)
一.分析CPU瓶颈 1,性能指标 a>CPU使用率 CPU使用率描述了非空闲时间占总CPU时间的百分比,根据CPU上运行任务的不同可以分为:用户CPU.系统CPU.等待I/O CPU.软中断和硬 ...
- 调用WCF服务的几种方式
首先发布了一个名为PersonService的WCF服务.服务契约如下: [ServiceContract] public interface IPersonService { ...
- vmware启动后虚拟机无法联网
搜索services.msc打开服务 确认VMware NAT service和VMware DHCP service服务处于启动状态:开启自动启动,下次就会自动联网了. VMware Authori ...
- linux中docker容器安装vi命令详解
在使用docker容器时,同时你docker里的系统正好是debian或ubuntu的时候,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found,这个时候就需要 ...
- Windows Server 2012 R2通过命令行重置网络环境
转至:https://jingyan.baidu.com/article/48b37f8d5d89385a646488b5.html 我们使用Windows Server 2012 R2时会遇到通过命 ...
- 3D打印第二弹:狗牌
给朋友做一个狗牌(误,给朋友的狗狗做一个狗牌 1. 设计 没有设计功底,看看别人是如何做的,搜到一个狗牌: 照着这个做一个,正面是上图这种的:狗狗名字+狗爪子:另一面是手机号加联系说明文字. 2. 建 ...
- Python数据可视化 -- Wordcloud
Python数据可视化 -- Wordcloud 安装 启动命令行,输入:pip install wordcloud word cloud 库介绍 及简单使用 wordcloud库,可以说是pytho ...
- MongoDB创建普通账户与admin账户的配置方法
MongoDB数据库设置账户及权限的方法 1.如果MongoDB服务正在运行的情况下,需先停止该服务 在cmd(命令提示符)下输入net stop MongoDB,按下enter(回车键) 运行结果: ...