[AHOI2013]作业

题目大意:

给定一个长度为\(n(n\le10^5)\)的数列\(A(1\le A_i\le n)\)。\(m(m\le10^6)\)次询问,每次询问区间\([l,r]\)内满足\(a\le A_i\le b\)的数有多少,去重后又有多少。

思路:

莫队+分块。

时间复杂度\(\mathcal O(n\sqrt n)\)。

源代码:

#include<cmath>
#include<cstdio>
#include<cctype>
#include<algorithm>
inline int getint() {
register char ch;
while(!isdigit(ch=getchar()));
register int x=ch^'0';
while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');
return x;
}
const int N=1e5+1,M=1e6;
int n,m,block,a[N],ans0[M],ans1[M],cnt[N],sum[N],tot[N],bel[N],beg[N],end[N];
struct Query {
int l,r,a,b,id;
bool operator < (const Query &rhs) const {
if(l/block==rhs.l/block) return r<rhs.r;
return l/block<rhs.l/block;
}
};
Query q[M];
inline void ins(const int &x) {
if(!cnt[x]++) tot[bel[x]]++;
sum[bel[x]]++;
}
inline void del(const int &x) {
if(!--cnt[x]) tot[bel[x]]--;
sum[bel[x]]--;
}
inline std::pair<int,int> query(const int &l,const int &r) {
int ret0=0,ret1=0;
if(bel[l]==bel[r]) {
for(register int i=l;i<=r;i++) {
ret0+=cnt[i];
ret1+=!!cnt[i];
}
return std::make_pair(ret0,ret1);
}
for(register int i=l;i<=end[bel[l]];i++) {
ret0+=cnt[i];
ret1+=!!cnt[i];
}
for(register int i=bel[l]+1;i<bel[r];i++) {
ret0+=sum[i];
ret1+=tot[i];
}
for(register int i=beg[bel[r]];i<=r;i++) {
ret0+=cnt[i];
ret1+=!!cnt[i];
}
return std::make_pair(ret0,ret1);
}
int main() {
n=getint(),m=getint(),block=sqrt(n);
for(register int i=1;i<=n;i++) a[i]=getint();
for(register int i=0;i<m;i++) {
q[i].l=getint();
q[i].r=getint();
q[i].a=getint();
q[i].b=getint();
q[i].id=i;
}
std::sort(&q[0],&q[m]);
for(register int i=1;i<=n;i++) {
bel[i]=i/block;
if(!beg[bel[i]]) beg[bel[i]]=i;
end[bel[i]]=i;
}
for(register int i=0,l=1,r=0;i<m;i++) {
while(r<q[i].r) ins(a[++r]);
while(r>q[i].r) del(a[r--]);
while(l>q[i].l) ins(a[--l]);
while(l<q[i].l) del(a[l++]);
const std::pair<int,int> p=query(q[i].a,q[i].b);
ans0[q[i].id]=p.first;
ans1[q[i].id]=p.second;
}
for(register int i=0;i<m;i++) {
printf("%d %d\n",ans0[i],ans1[i]);
}
return 0;
}

[AHOI2013]作业的更多相关文章

  1. BZOJ 3236: [Ahoi2013]作业

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. BZOJ3236: [AHOI2013]作业

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

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

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

随机推荐

  1. iOS11有哪些新功能?旧iPhone是否真的变慢了

    1. [iOS 11] iOS 11十大实用新功能简介 2.[iOS 11] iPhone二维码扫描,通过内建相机就可以完成! 3. iOS 11内建屏幕录制功能!再也不需要通过第三方应用录屏 4.  ...

  2. ActiveMQ基础教程JMS概述

    什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息 ...

  3. bzoj千题计划213:bzoj2660: [Beijing wc2012]最多的方案

    http://www.lydsy.com/JudgeOnline/problem.php?id=2660 很容易想到是先把n表示成最大的两个斐波那契数相加,然后再拆分这两个斐波那契数 把数表示成斐波那 ...

  4. JavaScript1.6数组新特性和JQuery的几个工具方法

    JavaScript 1.6 引入了几个新的Array 方法,具体的介绍见:New in JavaScript 1.6 .这些方法已经被写进了ECMA262 V5.现代浏览器(IE9/Firefox/ ...

  5. Spring Mvc 一个接口多个继承; (八)

    在 spring 注解实现里,一个接口一般是不能多继承的! 除非在 bean 配置文件里有 针对这个 实现类的配置: <beans:bean id="icService" c ...

  6. python3之Splash

    Splash是一个javascript渲染服务.它是一个带有HTTP API的轻量级Web浏览器,使用Twisted和QT5在Python 3中实现.QT反应器用于使服务完全异步,允许通过QT主循环利 ...

  7. Implement Queue by Two Stacks & Implement Stack using Queues

    Implement Queue by Two Stacks Implement the following operations of a queue using stacks. push(x) -- ...

  8. Linux内核入门(六)—— __attribute__ 机制【转】

    转自:https://blog.csdn.net/yunsongice/article/details/5538020 GNU C的一大特色(却不被初学者所知)就是__attribute__机制.__ ...

  9. mysqldump只导出表结构或只导出数据的实现方法【转】

    mysql mysqldump 只导出表结构 不导出数据 mysqldump --opt -d 数据库名 -u root -p > xxx.sql 备份数据库 #mysqldump 数据库名 & ...

  10. elasticsearch常见异常及解决办法

    报错信息:Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 20602552 ...