bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)
题目传送门:洛谷P4396。
题意简述:
给定一个长度为\(n\)的数列。有\(m\)次询问,每次询问区间\([l,r]\)中数值在\([a,b]\)之间的数的个数,和数值在\([a,b]\)之间的不同的数的个数。
题解:
第一问可以用主席树维护,但是第二问呢?
考虑离线处理询问,用莫队算法。
问题转化为加入一个数,删除一个数,统计数值在一个区间中的数的个数。
离散化后可以用树状数组维护,但是复杂度多个log,变成了\(O(n\sqrt{n}\log n)\)。
考虑对数值也分块,先离散化,然后也是根号分块。修改时是$O(1)$的,查询是$O(\sqrt{n})$的。
那么考虑莫队的复杂度,有\(O(n\sqrt{n})\)次修改,但是只有$O(n)$次查询,那么总复杂度仍然是$O(n\sqrt{n})$。
#include<bits/stdc++.h>
using namespace std;
#define F(i,a,b) for(int i=(a);i<=(b);++i) int n,q,S,T,U;
int a[],b[],blk[];
struct D{int l,r,a,b,id;}Q[];
bool cmp(D i,D j){return blk[i.l]==blk[j.l]?i.r<j.r:blk[i.l]<blk[j.l];}
int cnt[],bel[],sum[],num[];
pair<int,int> Ans[]; void Ins(int p,int x){
if(!cnt[p]) ++num[bel[p]];
cnt[p]+=x, sum[bel[p]]+=x;
if(!cnt[p]) --num[bel[p]];
} pair<int,int> Qur(int a,int b){
if(a>b) return make_pair(,);
int S=,N=;
if(bel[a]==bel[b]) F(i,a,b) {if(cnt[i]) S+=cnt[i], ++N;}
else{
F(i,bel[a]+,bel[b]-) S+=sum[i], N+=num[i];
F(i,a,bel[a]*U) if(cnt[i]) S+=cnt[i], ++N;
F(i,bel[b]*U-U+,b) if(cnt[i]) S+=cnt[i], ++N;
}
return make_pair(S,N);
} int main(){
scanf("%d%d",&n,&q); S=sqrt(n)+0.5;
F(i,,n) blk[i]=(i-)/S+;
F(i,,n) scanf("%d",a+i), b[i]=a[i];
sort(b+,b+n+); T=unique(b+,b+n+)-b-;
U=sqrt(T)+0.5;
F(i,,T) bel[i]=(i-)/U+;
F(i,,n) a[i]=lower_bound(b+,b+T+,a[i])-b;
F(i,,q) scanf("%d%d%d%d",&Q[i].l,&Q[i].r,&Q[i].a,&Q[i].b), Q[i].id=i;
sort(Q+,Q+q+,cmp);
int L=,R=;
F(i,,q){
while(L>Q[i].l) --L, Ins(a[L],);
while(R<Q[i].r) ++R, Ins(a[R],);
while(L<Q[i].l) Ins(a[L],-), ++L;
while(R>Q[i].r) Ins(a[R],-), --R;
Ans[Q[i].id]=Qur(lower_bound(b+,b+T+,Q[i].a)-b,upper_bound(b+,b+T+,Q[i].b)-b-);
}
F(i,,q) printf("%d %d\n",Ans[i].first,Ans[i].second);
return ;
}
bzoj 3236: 洛谷 P4396: [AHOI2013]作业 (莫队, 分块)的更多相关文章
- [AHOI2013]作业 (莫队+分块)
[AHOI2013]作业 (莫队+分块) 题面 给定了一个长度为n的数列和若干个询问,每个询问是关于数列的区间[l,r],首先你要统计该区间内大于等于a,小于等于b的数的个数,其次是所有大于等于a,小 ...
- Bzoj 3236: [Ahoi2013]作业 莫队,分块
3236: [Ahoi2013]作业 Time Limit: 100 Sec Memory Limit: 512 MBSubmit: 1113 Solved: 428[Submit][Status ...
- 洛谷 P4396 (离散化+莫队+树状数组)
### 洛谷P4396 题目链接 ### 题目大意: 有 n 个整数组成的数组,m 次询问,每次询问中有四个参数 l ,r,a,b .问你在[l,r] 的区间内的所有数中,值属于[a,b] 的数的个 ...
- 洛谷 P4396 [AHOI2013]作业
题目描述 题目传送门 分析 因为询问是关于区间的,并且没有强制在线,所以能用莫队解决 但是还要支持查询区间内大于等于 \(a\),小于等于 \(b\) 的数的个数和数值的个数 所以还要套一个数据结构 ...
- bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...
- BZOJ3236:[AHOI2013]作业(莫队,分块)
Description Input Output Sample Input 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 Sample Output 2 2 1 ...
- 洛谷P4396 [AHOI2013]作业(树套树)
题意 题目链接 Sol 为什么一堆分块呀..三维数点不应该是套路离线/可持久化+树套树么.. 亲测树状数组套权值线段树可过 复杂度\(O(nlog^2n)\),空间\(O(nlogn)\)(离线) # ...
- BZOJ3236[Ahoi2013]作业——莫队+树状数组/莫队+分块
题目描述 输入 输出 样例输入 3 4 1 2 2 1 2 1 3 1 2 1 1 1 3 1 3 2 3 2 3 样例输出 2 2 1 1 3 2 2 1 提示 N=100000,M=1000000 ...
- BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )
莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢... ----------------------------------------------- ...
随机推荐
- java 静态类与静态方法应用场景
静态类:工具类 例如 Array.sort(arry) 静态方法:设置文件名
- FlatBuffers初探
我第一次知道FlatBuffers是因为Facebook写的这篇Android的技术博客文章.它主要介绍了FlatBuffers对比JSON的优势,以及Facebook Android App应用了F ...
- BZOJ5323 JXOI2018游戏(线性筛+组合数学)
可以发现这个过程非常类似埃氏筛,将在该区间内没有约数的数定义为质数,那么也就是求每种方案中选完所有质数的最早时间之和. 于是先求出上述定义中的质数个数,线性筛即可.然后对每个最短时间求方案数,非常显然 ...
- 【刷题】BZOJ 1969 [Ahoi2005]LANE 航线规划
Description 对Samuel星球的探险已经取得了非常巨大的成就,于是科学家们将目光投向了Samuel星球所在的星系--一个巨大的由千百万星球构成的Samuel星系. 星际空间站的Samuel ...
- phpredis -- Redis Arrays用法
Redis Arrays 来自地址:https://github.com/phpredis/phpredis/blob/master/arrays.markdown#readme 扩展原文件array ...
- 解题:POI 2008 Plot purchase
题面 原来看过然后没做,结果板板把这道题改了改考掉了,血亏=.= 首先看看有没有符合条件的点.如果没有开始寻找解,先把所有的大于$2*k$的点设为坏点,然后求最大子矩形,只要一个最大子矩形的权值和超过 ...
- Python之旅:并发编程之IO模型
一 IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非 ...
- activiti教程之示例项目activiti-explorer运行_百度经验
https://jingyan.baidu.com/article/4e5b3e19107ad091901e249e.html
- Java入门:JDK与Eclipse之类的集成开发工具的关系
JDK是Java Development Kit,也就是说Java开发所需的工具包.有了这个东西,一切Java开发理论上都不是问题了.当然,根据你下载的版本不同,可能擅长的领域不同.通常大家都是用JD ...
- kubernetes 1.9部署实践
目录 简要说明 环境说明 安装前的约定 配置etcd 生成相关证书 证书类型说明 cfssl配置 证书相关配置 生成ca证书 生成kubernetes证书 生成kubectl证书 生成kube-pro ...