洛谷 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 ...
随机推荐
- 【转】shell中的$0 $n $# $* $@ $? $$ 变量 if case for while
shell中的$0 $n $# $* $@ $? $$ shell 编程 | shift 命令用法笔记 $0当前脚本的文件名 $n传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个 ...
- ECDSA—模逆模块
在有限域Fp上的非零元素a的逆记为a-1mod p .即在有限域Fp上存在唯一的一个元素x,使得ax恒等于1(mod p),则元素x为a的逆a-1 .本次设计采用扩展的整数Euclidean算法来求逆 ...
- Jmeter系列(12)- 上传接口压测
step-1上传接口分析 上传接口源码分析:分析上传文件类型.有无大小限制.存放上传文件服务器 没有源码通过抓包工具,或者Chrome查看框架源代码 接口路径/uploadfile,接口请求POST, ...
- php 单向链表反转 reverse (没有空的头结点)
* 参照php标准库设计接口 http://php.net/manual/en/class.spldoublylinkedlist.php * 反转单向链表 reverse方法, 其他的方法为了方便测 ...
- jqGride的基本使用
1. 定义:jqGrid是一个在jQuery基础上封装一个表格控件,以ajax的方式和服务器端通信. 2. 使用方式: 2.1 项目中引入jqGride的文件: 2.2 搭建开发页面: 2.3 构建 ...
- Appium和Selenium的区别和联系
https://www.cnblogs.com/lv-lxz/p/11118862.html https://blog.csdn.net/weixin_42139375/article/details ...
- Python return self
在Python中,return self的作用为: Returning self from a method simply means that your method returns a refer ...
- P3214-[HNOI2011]卡农【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3214 题目大意 一个由\(1\sim n\)的所有整数构成的集合\(S\),求出它的\(m\)个不同非空子集满足 ...
- truncate表时报“唯一/主键被启用的外部关键字引用”解决办法
前言:清空表时提示"唯一/主键被启用的外部关键字引用"这一警告信息 原因:是因为主键被子表引用,所以对主键进行更改就好了 解决: 使用 alter table table_name ...
- vue-混入( mixin 更方便的组件功能复用方法)的使用
前言 vue 中组件完成了样式和功能的综合复用,通过自定义指令完成了一部分功能的复用,本文总结一下混入在vue项目开发中提供的非常便利的功能复用. 正文 1.混入的分类 (1)全局混入 <div ...