BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]
题意:
询问区间权值在$[a,b]$范围内种类数和个数
莫队
权值分块维护种类数和个数$O(1)-O(\sqrt{N})$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
#define pii pair<int, int>
#define MP make_pair
#define fir first
#define sec second
typedef long long ll;
const int N=1e5+, M=1e6+, BN=, BS=;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
} int n, Q, a[N], l, r, x, y;
struct _blo{int l, r;} b[BN];
int block, m, pos[N];
struct Block{
inline void ini(){
block=sqrt( n );
m=(n-)/block+;
for(int i=; i<=n; i++) pos[i]=(i-)/block+;
for(int i=; i<=m; i++) b[i].l=(i-)*block+, b[i].r=i*block; b[m].r=n;
}
int kind[BS], c[N], sum[BS];
inline void add(int v) {
c[v]++; sum[pos[v]]++;
if(c[v]==) kind[pos[v]]++;
}
inline void del(int v) {
c[v]--; sum[pos[v]]--;
if(c[v]==) kind[pos[v]]--;
}
pii que(int l,int r) {
int pl=pos[l], pr=pos[r], ans1=, ans2=;
if(pl==pr) for(int i=l; i<=r; i++) ans1+=c[i], ans2+= c[i]>;
else{
for(int i=pl+; i<pr; i++) ans1+=sum[i], ans2+= kind[i];
for(int i=l; i<=b[pl].r; i++) ans1+=c[i], ans2+= c[i]>;
for(int i=b[pr].l; i<=r; i++) ans1+=c[i], ans2+= c[i]>;
}
return MP(ans1, ans2);
}
}B; struct meow{
int l, r, x, y, qid;
bool operator <(const meow &a) const{return pos[l]==pos[a.l] ? r<a.r : pos[l]<pos[a.l];}
}q[M];
pii ans[M];
void modui(){
int l=, r=;
for(int i=; i<=Q; i++){
while(r<q[i].r) r++, B.add(a[r]);
while(r>q[i].r) B.del(a[r]), r--;
while(l<q[i].l) B.del(a[l]), l++;
while(l>q[i].l) l--, B.add(a[l]);
ans[q[i].qid]= B.que(q[i].x, q[i].y);
}
} int main() {
freopen("in","r",stdin);
n=read(); Q=read();
for(int i=; i<=n; i++) a[i]=read();
for(int i=; i<=Q; i++) l=read(), r=read(), x=read(), y=read(), q[i]=(meow){l, r, x, y, i};
B.ini();
sort(q+, q++Q);
modui();
for(int i=; i<=Q; i++) printf("%d %d\n",ans[i].fir, ans[i].sec);
}
BZOJ 3809: Gty的二逼妹子序列 & 3236: [Ahoi2013]作业 [莫队]的更多相关文章
- bzoj3809 Gty的二逼妹子序列 & bzoj3236 [Ahoi2013]作业 莫队+分块
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3809 https://lydsy.com/JudgeOnline/problem.php?id ...
- [bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业
[bzoj3809]Gty的二逼妹子序列/[bzoj3236][Ahoi2013]作业 bzoj bzoj 题目大意:一个序列,m个询问在$[l,r]$区间的$[x,y]$范围内的数的个数/种类. ...
- BZOJ 3809: Gty的二逼妹子序列
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1387 Solved: 400[Submit][Status][Di ...
- Bzoj 3809: Gty的二逼妹子序列 莫队,分块
3809: Gty的二逼妹子序列 Time Limit: 35 Sec Memory Limit: 28 MBSubmit: 868 Solved: 234[Submit][Status][Dis ...
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- BZOJ 3809 Gty的二逼妹子序列(莫队+分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3809 [题目大意] 给定一个长度为n(1<=n<=100000)的正整数序 ...
- [ AHOI 2013 ] 作业 & [ BZOJ 3809 ] Gty的二逼妹子序列
\(\\\) Description 给出一个长为 \(n\) 的数列 \(A\) 和 \(k\),多次询问: 对于一个区间 \([L_i,R_i]\),问区间内有多少个数在 \([a_i,b_i]\ ...
- bzoj 3809 Gty的二逼妹子序列 —— 莫队+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809 据说一开始应该想到莫队+树状数组,然而我想的却是莫队+权值线段树... 如果用权值线段 ...
- bzoj 3809 Gty的二逼妹子序列——莫队+分块
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3809 容易想到树状数组维护值域.但修改和查询都是 log 太慢. 考虑有 nsqrt(n) ...
随机推荐
- c++(排序二叉树线索化)
前面我们谈到了排序二叉树,还没有熟悉的同学可以看一下这个,二叉树基本操作.二叉树插入.二叉树删除1.删除2.删除3.但是排序二叉树也不是没有缺点,比如说,如果我们想在排序二叉树中删除一段数据的节点怎么 ...
- node.js和express创建服务器
创建web服务器 一. 使用node.js创建服务器. 使用express创建http服务. 监控服务器的变化. 二. 初始化配置文件:npm init -y 使用typescript编写,导入nod ...
- DFS算法(——模板习题与总结)
首先,需要说明的是搜索算法本质上也是枚举的一种,时间复杂度还是很高的,遇到问题(特别是有水平的比赛上),不要优先使用搜索算法. 这里总结一下DFS算法: 1.从图中某个顶点出发,访问v. 2.找出刚访 ...
- 从零开始学习前端开发 — 12、CSS3弹性布局
一.分栏布局 1.设置栏数column-count:数值; 2.设置每栏的宽度column-width:数值+单位; 注:当设置了column-width,column-count会失效,二者设置其一 ...
- windows server 2008使用nginx转发API异常解决办法
公司比较传统,一直使用的JSP做项目,没有遇到过跨域问题. 最近因为公司接到一个微信spa项目,因为考虑到项目需要调用老接口,斗胆选择nginx(1.12.1)做接口转发服务, 开发环境使用的win1 ...
- LindDotNetCore~Polly组件对微服务场景的价值
回到目录 Polly是一个开源框架,在github上可以找到,被善友大哥收录,也是.App vNext的一员! App vNext:https://github.com/App-vNext GitHu ...
- DataTable转泛型List
在.net项目研发过程中,有时候需要将从数据库中获取的DataTable数据类型,转换为泛型集合,然后运用LINQ对集合进行操作,我将此总结一下,方便你我他. 核心类: public class Da ...
- python生产随机数案例
法1: list =list(string.lowercase + string.uppercase) + [str(i) for i in range(10)]FH=('!','@','#','$' ...
- SpringAOP简单入门
注解形式 步骤一.定义一个interface public interface ArithmeticCalculator { double plus(int i, int j); double sub ...
- js_3_for_if_try
在js中有哪些特殊变量? null 指向一个空地址,一个特殊的地址 var u 定义了一个特殊变量u,类型未定义,boolean(u)=false js中的for循环是什么样子? 对列表: for(v ...