链接:

P4867


题意:

给出长度为 \(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的二逼妹子序列的更多相关文章

  1. 洛谷P4867 Gty的二逼妹子序列(莫队+树状数组)

    传送门 本来打算用主席树 然后发现没办法维护颜色数 于是用了莫队加树状数组 然后竟然A了…… //minamoto #include<iostream> #include<cstdi ...

  2. P4867 Gty的二逼妹子序列

    题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们规定妹子们的美 ...

  3. 【题解】Luogu P4867 Gty的二逼妹子序列

    原题传送门 同Luogu P4396 [AHOI2013]作业 询问多了10倍,但还能跑过(smog #include <bits/stdc++.h> #define N 100005 # ...

  4. [AHOI2013]作业 & Gty的二逼妹子序列 莫队

    ---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...

  5. BZOJ 3809: Gty的二逼妹子序列

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1387  Solved: 400[Submit][Status][Di ...

  6. 【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1072  Solved: 292[Submit][Status][Di ...

  7. Bzoj 3809: Gty的二逼妹子序列 莫队,分块

    3809: Gty的二逼妹子序列 Time Limit: 35 Sec  Memory Limit: 28 MBSubmit: 868  Solved: 234[Submit][Status][Dis ...

  8. 3809: Gty的二逼妹子序列

    3809: Gty的二逼妹子序列 链接 分析: 和这道AHOI2013 作业差不多.权值是1~n的,所以对权值进行分块.$O(1)$修改,$O(\sqrt n)$查询. 代码: #include< ...

  9. 【BZOJ 3809】 3809: Gty的二逼妹子序列 (莫队+分块)

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1728  Solved: 513 Description Autumn ...

随机推荐

  1. 谈谈raft fig8 —— 迷惑的提交条件和选举条件

    谈谈raft fig8 -- 迷惑的提交条件和选举条件 前言 这篇文章的思路其实在两个月前就已经成型了,但由于实习太累了,一直没来得及写出来.大概一个月前在群里和群友争论fig8的一些问题时,发现很多 ...

  2. PTA 面向对象程序设计6-2 统计数字

    对于给定的一个字符串,统计其中数字字符出现的次数. 类和函数接口定义: 设计一个类Solution,其中包含一个成员函数count_digits,其功能是统计传入的string类型参数中数字字符的个数 ...

  3. python循环以及控制语句

    python流程 学习完本篇,你将会通过python完成以下题目 试利用break语句求解2-100之间的素数. (1)素数是指除了能被1和它本身整除外,不能被其它数所整除的数.判断一个自然数是否是素 ...

  4. CF891C-Envy【可撤销并查集】

    正题 题目链接:https://www.luogu.com.cn/problem/CF891C 题目大意 \(n\)个点\(m\)条边的一张无向联通图,每次询问一个边集能否同时出现在同一棵最小生成树上 ...

  5. P4424-[HNOI/AHOI2018]寻宝游戏【结论】

    正题 题目链接:https://www.luogu.com.cn/problem/P4424 题目大意 \(n\)个\(m\)位二进制数,开始是一个\(0\). 然后依次对所有二进制数进行\(n\)次 ...

  6. 前端规范之JS代码规范(ESLint + Prettier)

    代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...

  7. Python接口自动化测试概念以及意义

    接口定义: 接口普遍有两种意思,一种是API(Application Program Interface),应用编程接口,它是一组定义.程序及协议的集合,通过API接口实现计算机软件之间的相互通信.而 ...

  8. Java——多线程编程学习/01

    原文章:http://www.cnblogs.com/QG-whz/p/8351298.html  注:建议去看原博主的文章,单就这个知识点而论,比书本讲的透彻,如有违规,联系必删! 并发环境下进行编 ...

  9. HTML选择器的四种使用方法

    选择器<style> 为了让.html代码更加简洁,这里引入选择器style 本文总共介绍选择器的四种使用方式 一.选择器的四种形式 1.ID选择器 id表示身份,在页面元素中的id不允许 ...

  10. Docker小白到实战之Docker Compose在手,一键足矣

    前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...