洛谷 P4867 Gty的二逼妹子序列
链接:
题意:
给出长度为 \(n(1\leq n\leq 10^5)\) 的序列 \(s\),保证\(1\leq s_i\leq n\)。有 \(m(1\leq m\leq 10^6)\) 次询问,每次询问给出 \(4\) 个整数 \(l,r,a,b(1\leq l\leq r\leq n,1\leq a\leq b\leq n)\),询问在 \([l,r]\) 的序列中有多少种权值属于 \([a,b]\)。
分析:
感觉这道题和数颜色有一点像,区别是有值域的范围限制。看操作可以离线,所以首先就考虑莫队了,所以我开了两个树状数组存数量和种类,写出了大常数的 \(O(m\sqrt n\log n)\),开了 O2 还能卡过,不开就爆掉了。
莫队移动的时间复杂度是 \(O((n+m)\sqrt n)\) 这里视为 \(O(m\sqrt n)\),已经很大了,所以对修改和查询的时间复杂度有比较大的要求。这里注意到 \(a,b\) 有着良好的性质:\(1\leq a\leq b\leq n\) 使得我们可以对值域进行分块,从而做到 \(O(1)\) 修改,\(O(\sqrt n)\) 查询,于是总的时间复杂度为 \(O(m\sqrt n)\)。
代码:
#include<bits/stdc++.h>
using namespace std;
#define in read()
inline int read(){
int p=0,f=1;
char c=getchar();
while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c<='9'){p=p*10+c-'0';c=getchar();}
return p*f;
}
const int N=1e5+5;
const int Q=1e6+5;
int a[N],n,m,T,tl,tr;
struct ques{
int l,r,L,R,o;
}q[Q];
inline int k(int x){return (x-1)/T+1;}
inline bool cmp(ques x,ques y){
tl=k(x.l),tr=k(y.l);
if(tl!=tr)return tl<tr;
return (tl&1)?x.r>y.r:x.r<y.r;
}
int s[N],S[N];
void add(int x){s[x]++;S[k(x)]+=(s[x]==1);}
void del(int x){s[x]--;S[k(x)]-=(s[x]==0);}
int que(int l,int r){
int res=0;tl=k(l),tr=k(r);
if(tl==tr||tr-tl==1)
for(int i=l;i<=r;i++) res+=s[i]?1:0;
else{
for(int i=tl+1;i<=tr-1;i++) res+=S[i];
for(int i=l;i<=tl*T;i++) res+=s[i]?1:0;
for(int i=(tr-1)*T+1;i<=r;i++) res+=s[i]?1:0;
}
return res;
}
int ans[Q];
signed main(){
n=in,m=in;T=sqrt(n);
for(int i=1;i<=n;i++)a[i]=in;
for(int i=1;i<=m;i++)
q[i].l=in,q[i].r=in,q[i].L=in,q[i].R=in,q[i].o=i;
sort(q+1,q+1+m,cmp);
int tl=1,tr=0;
for(int i=1;i<=m;i++){
int l=q[i].l,r=q[i].r,L=q[i].L,R=q[i].R,o=q[i].o;
while(tr<r)add(a[++tr]);
while(tr>r)del(a[tr--]);
while(tl<l)del(a[tl++]);
while(tl>l)add(a[--tl]);
ans[o]=que(L,R);
}
for(int i=1;i<=m;i++)
cout<<ans[i]<<'\n';
return 0;
}
洛谷 P4867 Gty的二逼妹子序列的更多相关文章
- 洛谷P4867 Gty的二逼妹子序列(莫队+树状数组)
传送门 本来打算用主席树 然后发现没办法维护颜色数 于是用了莫队加树状数组 然后竟然A了…… //minamoto #include<iostream> #include<cstdi ...
- P4867 Gty的二逼妹子序列
题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们规定妹子们的美 ...
- 【题解】Luogu P4867 Gty的二逼妹子序列
原题传送门 同Luogu P4396 [AHOI2013]作业 询问多了10倍,但还能跑过(smog #include <bits/stdc++.h> #define N 100005 # ...
- [AHOI2013]作业 & Gty的二逼妹子序列 莫队
---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1072 Solved: 292[Submit][Status][Di ...
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 链接 分析: 和这道AHOI2013 作业差不多.权值是1~n的,所以对权值进行分块.$O(1)$修改,$O(\sqrt n)$查询. 代码: #include< ...
- 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1728 Solved: 513 Description Autumn ...
随机推荐
- linux 下 I/O 多路复用初探
本文内容整理自B站up主 free-coder 发布的视频:[并发]IO多路复用select/poll/epoll介绍 引入 一般来讲,服务器在处理IO请求(一般指的是socket编程)时,需要对so ...
- 理解ASP.NET Core - [04] Host
注:本文隶属于<理解ASP.NET Core>系列文章,请查看置顶博客或点击此处查看全文目录 本文会涉及部分 Host 相关的源码,并会附上 github 源码地址,不过为了降低篇幅,我会 ...
- Vue个人博客关于标题自动打字机效果Typewriter
最近在写个人Blog 中间看过很多个人博客的开发 一大部分用的是Hexo框架或者vuePress框架 导入各种主题样式插件等等 但是看多了就会发现 很多博主的个人博客基本都很相似 并没有什么新东西呈现 ...
- C++ windows 函数讲解(二)鼠标坐标
获得鼠标坐标: #include<bits/stdc++.h> #include<windows.h> using namespace std; int main() { PO ...
- Java基础系列(40)- Arrays类
Arrays类 数据的工具类java.util.Arrays 由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作 查看 ...
- Shell系列(6)- 管道符
多命令顺序执行 多命令执行符 格式 作用 ; 命令1 ; 命令2 连接命令:多个命令顺序执行,命令之间没有任何逻辑联系:前面命令报错,后面命令照常执行 && 命令1 && ...
- Django边学边记—视图
一. url (一)配置 在项目/settings.py中通过ROOT_URLCONF指定url配置 ROOT_URLCONF = 'XXXX.urls' 打开 项目/urls.py 配置 (二)语法 ...
- SonarScanner扫描Maven项目使用说明
最近在学习使用sonar扫描代码,已经成功扫描python项目,而扫描java代码不成功. 在网上找到的扫描java项目文章,经过尝试之后也没有成功. 本人自己研究了sonar官方的使用说明文章,将其 ...
- 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 百篇博客分析OpenHarmony源码 | v29.01
百篇博客系列篇.本篇为: v29.xx 鸿蒙内核源码分析(信号量篇) | 谁在负责解决任务的同步 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁当立 ...
- 深入浅出WPF-06.Binding(绑定)03
MultiBinding(多路Binding) 当UI中的显示信息是由源Source中的多个数据来决定时,使用MultiBinding.他和Binding的区别是需要传递多个元数据,针对多个数据源需要 ...