bzoj 3809 Gty的二逼妹子序列——莫队+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809
容易想到树状数组维护值域。但修改和查询都是 log 太慢。
考虑有 nsqrt(n) 个修改、m个查询,所以给查询 sqrt(n) ,给修改 O(1) 。对值域分块即可。(msqrt(n)也能过?)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+,M=1e6+,K=;
int n,m,a[N],base,bh[N],cnt[N],sm[K],ans[M];
struct Ques{
int l,r,a,b,bh;
}q[M];
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='') ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return fx?ret:-ret;
}
bool cmp(Ques u,Ques v){return bh[u.l]==bh[v.l]?u.r<v.r:bh[u.l]<bh[v.l];}
void add(int x)
{
if(!cnt[x])sm[bh[x]]++; cnt[x]++;
}
void del(int x)
{
cnt[x]--; if(!cnt[x])sm[bh[x]]--;
}
int query(int l,int r)
{
int ret=;
if(bh[r]-bh[l]<=)
{
for(int i=l;i<=r;i++)if(cnt[i])ret++;
return ret;
}
for(int i=bh[l]+;i<bh[r];i++) ret+=sm[i];
int L=base*bh[l],R=base*(bh[r]-);
for(int i=l;i<=L;i++)if(cnt[i])ret++;
for(int i=R+;i<=r;i++)if(cnt[i])ret++;
return ret;
}
int main()
{
n=rdn(); m=rdn(); base=sqrt(n);
for(int i=;i<=n;i++) a[i]=rdn(),bh[i]=(i-)/base+;
for(int i=;i<=m;i++)
q[i].l=rdn(),q[i].r=rdn(),q[i].a=rdn(),q[i].b=rdn(),q[i].bh=i;
sort(q+,q+m+,cmp);
int L=,R=;
for(int i=;i<=m;i++)
{
int l=q[i].l,r=q[i].r;
while(L>l)add(a[--L]);
while(R<r)add(a[++R]);
while(L<l)del(a[L++]);
while(R>r)del(a[R--]);
ans[q[i].bh]=query(q[i].a,q[i].b);
}
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}
bzoj 3809 Gty的二逼妹子序列——莫队+分块的更多相关文章
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- bzoj 3809 Gty的二逼妹子序列 —— 莫队+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809 据说一开始应该想到莫队+树状数组,然而我想的却是莫队+权值线段树... 如果用权值线段 ...
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- [BZOJ3809]Gty的二逼妹子序列[莫队+分块]
题意 给出长度为 \(n\) 的序列,\(m\) 次询问,每次给出 \(l,r,a,b\) ,表示询问区间 \([l,r]\) 中,权值在 \([a,b]\) 范围的数的种类数. \(n\leq 10 ...
- 【BZOJ3809】Gty的二逼妹子序列 莫队 分块
题目描述 给你一个长度为\(n\)的数列,还有\(m\)个询问,对于每个询问\((l,r,a,b)\),输出区间\([l,r]\)有多少范围在\([a,b]\)的权值. \(n\leq 100000, ...
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- [AHOI2013]作业 & Gty的二逼妹子序列 莫队
---题面--- 题解: 题目要求统计一个区间内数值在[a, b]内的数的个数和种数,而这个是可以用树状数组统计出来的,所以可以考虑莫队. 考虑区间[l, r]转移到[l, r + 1],那么对于维护 ...
- [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列
\(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...
- BZOJ 3809 Gty的二逼妹子序列(莫队+分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3809 [题目大意] 给定一个长度为n(1<=n<=100000)的正整数序 ...
随机推荐
- uva 11248 Frequency Hopping (最大流)
uva 11248 Frequency Hopping 题目大意:给定一个有向网络,每条边均有一个容量. 问是否存在一个从点1到点N.流量为C的流.假设不存在,能否够恰好改动一条弧的容量,使得存在这种 ...
- 百科知识 .tar.xz文件如何打开
7-ZIP可以打开,右击提取到当前目录即可 发现这个压缩比例还是相当不一般的,都快十倍了.
- weblogic中部署项目报错org.hibernate.QueryException: ClassNotFoundException: org.hibernate.hql.ast.HqlToken .
原因: 原因是weblogic要查找自己的antlr,和lib下面的antlr包冲突.... 解决方法: 在weblogic.xml添加 <container-descriptor> ...
- viewState详解
作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对 ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整 ...
- Linux中du和df
Linux运维过程中,常常发现du和df返回值不一样,偶尔会发现区别非常大. 特定情况下,可能df看到磁盘已满,可是du推断磁盘剩余空间非常大. 文件系统分配当中的一些磁盘块用来记录它自身的一些数据. ...
- 如何求文件File的字节数
[java]代码库 import java.io.*; /** * 获取文件的字节数 */ class FileInputStreamS { public static voi ...
- mnesia练习及基本操作
Mnesia基本用法 查看表结构 查看mnesia表的结构: mnesia:info(). 查看此表的基本信息: mnesia:table_info(<tableName>, all). ...
- shell脚本定时任务 ( linux系统)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGV5YW5nanVu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 简化Android的startActivityForResult调用
一个是解决在onActivityResult 中判断requestCode的问题,第二个是让调用代码的地方就知道我是如何处理对方activity 的返回的. 首先我们有一个ResultActivity ...
- 面向资源操作的http请求
Guide | Echo - High performance, minimalist Go web framework https://echo.labstack.com/guide e.POST( ...