#6201. 「YNOI2016」掉进兔子洞

您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手:

给出一个长为 nnn 的序列 aaa。

有 mmm 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立。

注意这里删掉指的是一个一个删,不是把等于这个值的数直接删完,比如三个区间是 [1,2,2,3,3,3,3][1,2,2,3,3,3,3][1,2,2,3,3,3,3] , [1,2,2,3,3,3,3][1,2,2,3,3,3,3][1,2,2,3,3,3,3] 与 [1,1,2,3,3][1,1,2,3,3][1,1,2,3,3],就一起扔掉了 111 个 111,111 个 222,222 个 333。

输入格式

第一行两个数表示 nnn , mmm。

第二行 nnn个数表示 aia_ia​i​​。

之后 mmm 行,每行 666 个数 l1l_1l​1​​ , r1r_1r​1​​ , l2l_2l​2​​ , r2r_2r​2​​ , l3l_3l​3​​ , r3r_3r​3​​ 表示这三个区间。

输出格式

对于每个询问,输出一个数表示答案。

样例

SAMPLE INPUT

5 2
1 2 2 3 3
1 2 2 3 3 4
1 5 1 5 1 5

SAMPLE OUTPUT

3
0

数据范围与提示

1≤n,m≤1051 \leq n,m \leq 10^{5}1≤n,m≤10​5​​ , 1≤ai≤1091 \leq a_i \leq 10^{9}1≤a​i​​≤10​9​​

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cmath>
#define maxn 100010
using namespace std;
int n,a[maxn],b[maxn],cnt[maxn],pos[maxn],block,tot,ans[maxn],T=;
bool mark[maxn];
struct node{int l,r,id;}q[maxn];
bitset<>F[],f;
bool cmp(node a,node b){
if(pos[a.l]==pos[b.l])return a.r<b.r;
return pos[a.l]<pos[b.l];
}
void update(int k,int ty){
k=a[k];cnt[k]+=ty;
if(ty==)f[k+cnt[k]-]=;
else f[k+cnt[k]-]=;
}
void solve(int m){
int L,R,l1,l2,l3,r1,r2,r3;
memset(cnt,,sizeof(cnt));
memset(mark,,sizeof(mark));
f.reset();tot=;
for(int i=;i<=m;i++){
scanf("%d%d%d%d%d%d",&l1,&r1,&l2,&r2,&l3,&r3);
q[++tot]=(node){l1,r1,i};
q[++tot]=(node){l2,r2,i};
q[++tot]=(node){l3,r3,i};
ans[i]=r3+r2+r1-l3-l2-l1+;
}
sort(q+,q+tot+,cmp);
L=;R=;
for(int i=;i<=tot;i++){
while(R<q[i].r)update(++R,);
while(R>q[i].r)update(R--,-);
while(L<q[i].l)update(L++,-);
while(L>q[i].l)update(--L,);
if(mark[q[i].id])F[q[i].id]&=f;
else F[q[i].id]=f,mark[q[i].id]=;
}
for(int i=;i<=m;i++){
int k=F[i].count();
printf("%d\n",ans[i]-*k);
}
}
int main(){
int m;
scanf("%d%d",&n,&m);
block=sqrt(n);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
pos[i]=(i-)/block+;
}
sort(b+,b+n+);
for(int i=;i<=n;i++)
a[i]=lower_bound(b+,b+n+,a[i])-b;
while(m){
if(m<=T)solve(m),m=;
else solve(T),m-=T;
}
return ;
}

loj #6201. 「YNOI2016」掉进兔子洞的更多相关文章

  1. YNOI2016:掉进兔子洞 (莫队+bitset)

    YNOI2016:掉进兔子洞 题意简述: 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于这 ...

  2. 【bzoj4939】【YNOI2016】掉进兔子洞(莫队)

    题目描述 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个 ...

  3. 【LOJ6201】【bzoj4939】【YNOI2016】掉进兔子洞

    一道比较简单的莫队…… 用bitset维护三个区间的交元素. #include<bits/stdc++.h> ; ; #define UI unsigned int #define rep ...

  4. luogu P4688 [Ynoi2016]掉进兔子洞 bitset 莫队

    题目链接 luogu P4688 [Ynoi2016]掉进兔子洞 题解 莫队维护bitset区间交个数 代码 // luogu-judger-enable-o2 #include<cmath&g ...

  5. [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)

    [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...

  6. Loj #3093. 「BJOI2019」光线

    Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...

  7. LOJ #6435. 「PKUSC2018」星际穿越(倍增)

    题面 LOJ#6435. 「PKUSC2018」星际穿越 题解 参考了 这位大佬的博客 这道题好恶心啊qwq~~ 首先一定要认真阅读题目 !! 注意 \(l_i<r_i<x_i\) 这个条 ...

  8. loj#2552. 「CTSC2018」假面

    题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...

  9. Loj #3044. 「ZJOI2019」Minimax 搜索

    Loj #3044. 「ZJOI2019」Minimax 搜索 题目描述 九条可怜是一个喜欢玩游戏的女孩子.为了增强自己的游戏水平,她想要用理论的武器武装自己.这道题和著名的 Minimax 搜索有关 ...

随机推荐

  1. 【知识结构】最强Web认证知识体系

    花了些时间总结了下Web认证,以及各种方式的利弊和使用,后续后继续更新.文章转载请注明出处:https://www.cnblogs.com/pengdai/p/9144843.html -----20 ...

  2. <转>Linux环境进程间通信--信号灯(四)

    http://www.ibm.com/developerworks/cn/linux/l-ipc/part4/ 一.信号灯概述 信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机 ...

  3. The centos disc was not found in any of your drives.Please insert the centos disc and press OK to retry

    查看虚拟机设置中关于CDROM的选项,将CDROM的状态改为已连接,不要奇怪,勾选上之后再按下OK就好了

  4. SQL2005 异常处理机制(Begin try Begin Catch)

    将可能会出错的sql 写在begin try...end try 之间,若出错,刚程序就跳到紧接着的begin try...end try 的beign catch...end catch中,执行be ...

  5. Hadoop之HDFS(一)HDFS入门及基本Shell命令操作

    1 . HDFS 基本概念 1.1  HDFS 介绍 HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统.是 Hadoop 核心组件之 ...

  6. CSS 伪类与伪元素

    CSS的元素选择器除了根据id(#).class(.).属性([ ])选取元素以外,还有很重要的一类,就是根据元素的特殊状态来选取元素.它们就是伪类和伪元素.跟id选择器.类选择器.属性选择器以及派生 ...

  7. iOS与HTML5交互方法总结(修正)

    摘要 看了不少别人写的博客或者论坛,关于iOS与HTML5交互方法大概主要有5种方式: 1. 利用WKWebView进行交互(系统API) 2. 利用UIWebView进行交互(系统API) 3. 苹 ...

  8. 453. Minimum Moves to Equal Array Elements 一次改2个数,变成统一的

    [抄题]: Given a non-empty integer array of size n, find the minimum number of moves required to make a ...

  9. 11-内涵段子-爬虫(python+正则)

    爬取内涵段子,使用正则进行简单处理: #_*_ coding: utf-8 _*_ ''' Created on 2018年7月14日 @author: sss function:爬去内涵段子(静态网 ...

  10. dpdk中kni模块

    一,什么是kni,为什么要有kni Kni(Kernel NIC Interface)内核网卡接口,是DPDK允许用户态和内核态交换报文的解决方案,模拟了一个虚拟的网口,提供dpdk的应用程序和lin ...