Link

题目大意:\(n\)个数,\(m\)个询问,每次四个参数,\(l,r,a,b\),问区间\([l,r]\)中出现过的,数值在\([a,b]\)区间中的数的个数以及区间\([l,r]\)中数值在\([a,b]\)中的数的个数。

注意理解 这两个是不一样的。

\(\text{Solution:}\)

观察到区间颜色出现次数可以想到莫队。

由于多了一个限制,那么我们考虑如何更新答案,并利用前缀思想:

指针移动的时候,维护颜色数以及这个颜色的值,对应在一个树状数组上更新。注意维护两个树状数组,分别处理两个询问。其他的和普通莫队没什么区别。

复杂度\(O(n\sqrt{n}\log n).\)此处替换\(m\)因为它们同阶。

其实还有莫队套分块的更优复杂度以及\(KDT,cdq\)分治等多种做法,在此不做赘述。

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) (x&(-x))
const int MAXN=1e6+10;
int col[MAXN],cnt[MAXN],a[MAXN],n,m,tr[MAXN];
int bl[MAXN],siz,bnum,now,tr1[MAXN];
pair<int,int>ans[MAXN];
inline bool R(char C){return C>='0'&&C<='9';}
inline int read(){
int s=0;
char ch=getchar();
while(!R(ch))ch=getchar();
while(R(ch))s=s*10+ch-48,ch=getchar();
return s;
}
inline void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>=10)write(x/10);
putchar(x%10+48);
}
struct Q{
int l,r,a,b,id;
}q[MAXN];
inline bool cmp(Q a,Q b){return (bl[a.l]^bl[b.l])?bl[a.l]<bl[b.l]:(bl[a.l]&1)?a.r<b.r:a.r>b.r;}
inline void change(int x,int v){for(;x<=n;x+=lowbit(x))tr[x]+=v;}
inline int sum(int x){int res=0;for(;x;x-=lowbit(x))res+=tr[x];return res;}
inline void change2(int x,int v){for(;x<=n;x+=lowbit(x))tr1[x]+=v;}
inline int sum2(int x){int res=0;for(;x;x-=lowbit(x))res+=tr1[x];return res;} inline void del(int x){
--cnt[a[x]];
if(!cnt[a[x]])now--,change(a[x],-1);
change2(a[x],-1);
}
inline void add(int x){
if(!cnt[a[x]])change(a[x],1),now++;
++cnt[a[x]];change2(a[x],1);
}
int main(){
n=read(),m=read();
for(int i=1;i<=n;++i)a[i]=read();
siz=sqrt(n);bnum=ceil((double)n/siz);
for(int i=1;i<=bnum;++i)for(int j=(i-1)*siz+1;j<=i*siz;++j)bl[j]=i;
for(int i=1;i<=m;++i){
q[i].id=i;
q[i].l=read();
q[i].r=read();
q[i].a=read();
q[i].b=read();
}
sort(q+1,q+m+1,cmp);
int l=1,r=0;
for(int i=1;i<=m;++i){
int ql=q[i].l,qr=q[i].r;
while(l<ql)del(l++);
while(l>ql)add(--l);
while(r<qr)add(++r);
while(r>qr)del(r--);
ans[q[i].id].first=sum2(q[i].b)-sum2(q[i].a-1);
ans[q[i].id].second=sum(q[i].b)-sum(q[i].a-1);
}
for(int i=1;i<=m;++i)write(ans[i].first),putchar(' '),write(ans[i].second),putchar('\n');
return 0;
}

【题解】[AHOI2013]作业的更多相关文章

  1. 树套树专题——bzoj 3110: [Zjoi2013] K大数查询 &amp; 3236 [Ahoi2013] 作业 题解

    [原题1] 3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MB Submit: 978  Solved: 476 Descri ...

  2. Bzoj 3236: [Ahoi2013]作业 莫队,分块

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1113  Solved: 428[Submit][Status ...

  3. 【Luogu4396】[AHOI2013]作业(莫队)

    [Luogu4396][AHOI2013]作业(莫队) 题面 洛谷 题解 模板题 #include<iostream> #include<cstdio> #include< ...

  4. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

  5. BZOJ 3236: [Ahoi2013]作业

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1393  Solved: 562[Submit][Status ...

  6. BZOJ 3236: [Ahoi2013]作业( 莫队 + BIT )

    莫队..用两个树状数组计算.时间复杂度应该是O(N1.5logN). 估计我是写残了...跑得很慢... ----------------------------------------------- ...

  7. BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块

    BZOJ_3809_Gty的二逼妹子序列 && BZOJ_3236_[Ahoi2013]作业 _莫队+分块 Description Autumn和Bakser又在研究Gty的妹子序列了 ...

  8. [AHOI2013]作业

    [AHOI2013]作业 题目大意: 给定一个长度为\(n(n\le10^5)\)的数列\(A(1\le A_i\le n)\).\(m(m\le10^6)\)次询问,每次询问区间\([l,r]\)内 ...

  9. BZOJ3236: [AHOI2013]作业

    BZOJ3236: [AHOI2013]作业 题目描述 传送门 行,我知道是Please contact lydsy2012@163.com! 传送门2 题目分析 这题两问还是非常,emmmm. 首先 ...

  10. bzoj 3236: [Ahoi2013]作业(缺线段树)

    3236: [Ahoi2013]作业 Time Limit: 100 Sec  Memory Limit: 512 MBSubmit: 1744  Solved: 702[Submit][Status ...

随机推荐

  1. Android开发工具资料Android Manifest 权限描述大全 随时随地查询权限描述。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985转载请说明出处. 在文章最后面赠送了markdown格式的此文章内容下载.(不要再问问什么用markdo ...

  2. Photon PUN 三 RPCs & RaiseEvent

    官方文档地址 https://doc.photonengine.com/en-us/pun/current/manuals-and-demos/rpcsandraiseevent 一, RPC   P ...

  3. Mysql慢查询(配置)

    慢查询?什么鬼?查询很慢吗?刚看一脸萌,学无止境 好吧,就是执行很慢的SQL 什么是慢查询 慢查询定义及作用 慢查询日志,顾名思义,就是查询慢的日志(感觉在说F话),是指Mysql记录所有执行超过lo ...

  4. 「面向 offer 学算法」笔面试大杀器 -- 单调栈

    目录 前言 单调栈 初入茅庐 小试牛刀 打怪升级 出师试炼 前言 单调栈是一种比较简单的数据结构.虽然简单,但在某些题目中能发挥很好的作用. 最近很多大厂的笔试.面试中都出现了单调栈的题目,而还有不少 ...

  5. SpringMVC-09-Ajax技术

    9. Ajax技术 简介 AJAX=Asynchronous JavaScript and XML (异步的JavaScript和XML) AJAX是一种在无需重新加载整个网页的情况下,能够更新部分网 ...

  6. 理解C#中的ExecutionContext vs SynchronizationContext

    原文:https://devblogs.microsoft.com/pfxteam/executioncontext-vs-synchronizationcontext/ 作者:Stephen 翻译: ...

  7. LuoGu P1909 买铅笔???

    题目描述 P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物.她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同.为了公平起 见,P老师决定只买同一种包装的铅笔. ...

  8. 一次MySQL索引失效引发的思考

    最近公司做了一个千万数量级的项目,由于要求性能比较高,每一个相对慢的查询都需要优化,项目经理是一个比较有经验的开发人员,基本上遇到问题都会先自行处理:或自己分析原因或网络寻求帮助. 但是项目平稳运行一 ...

  9. Catalina 动态壁纸相关设置

    关闭SIP 重启,在开机时一直按Command+r进入recovery模式. 打开终端,如图所示: 在终端中输入命令,回车: csrutil disable 然后重启 设置动态壁纸 首先需在Dynam ...

  10. Ansible常用模块介绍及使用(2)

    Ansible模块 在上一篇博客<Ansible基础认识及安装使用详解(一)–技术流ken>中以及简单的介绍了一下ansible的模块.ansible是基于模块工作的,所以我们必须掌握几个 ...