loj #6201. 「YNOI2016」掉进兔子洞
#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_iai。
之后 mmm 行,每行 666 个数 l1l_1l1 , r1r_1r1 , l2l_2l2 , r2r_2r2 , l3l_3l3 , r3r_3r3 表示这三个区间。
输出格式
对于每个询问,输出一个数表示答案。
样例
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≤105 , 1≤ai≤1091 \leq a_i \leq 10^{9}1≤ai≤109
#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」掉进兔子洞的更多相关文章
- YNOI2016:掉进兔子洞 (莫队+bitset)
YNOI2016:掉进兔子洞 题意简述: 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于这 ...
- 【bzoj4939】【YNOI2016】掉进兔子洞(莫队)
题目描述 您正在打galgame,然后突然发现您今天太颓了,于是想写个数据结构题练练手: 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个 ...
- 【LOJ6201】【bzoj4939】【YNOI2016】掉进兔子洞
一道比较简单的莫队…… 用bitset维护三个区间的交元素. #include<bits/stdc++.h> ; ; #define UI unsigned int #define rep ...
- luogu P4688 [Ynoi2016]掉进兔子洞 bitset 莫队
题目链接 luogu P4688 [Ynoi2016]掉进兔子洞 题解 莫队维护bitset区间交个数 代码 // luogu-judger-enable-o2 #include<cmath&g ...
- [Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset)
[Luogu 4688] [Ynoi2016]掉进兔子洞 (莫队+bitset) 题面 一个长为 n 的序列 a.有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...
- Loj #3093. 「BJOI2019」光线
Loj #3093. 「BJOI2019」光线 题目描述 当一束光打到一层玻璃上时,有一定比例的光会穿过这层玻璃,一定比例的光会被反射回去,剩下的光被玻璃吸收. 设对于任意 \(x\),有 \(x\t ...
- LOJ #6435. 「PKUSC2018」星际穿越(倍增)
题面 LOJ#6435. 「PKUSC2018」星际穿越 题解 参考了 这位大佬的博客 这道题好恶心啊qwq~~ 首先一定要认真阅读题目 !! 注意 \(l_i<r_i<x_i\) 这个条 ...
- loj#2552. 「CTSC2018」假面
题目链接 loj#2552. 「CTSC2018」假面 题解 本题严谨的证明了我菜的本质 对于砍人的操作好做找龙哥就好了,blood很少,每次暴力维护一下 对于操作1 设\(a_i\)为第i个人存活的 ...
- Loj #3044. 「ZJOI2019」Minimax 搜索
Loj #3044. 「ZJOI2019」Minimax 搜索 题目描述 九条可怜是一个喜欢玩游戏的女孩子.为了增强自己的游戏水平,她想要用理论的武器武装自己.这道题和著名的 Minimax 搜索有关 ...
随机推荐
- 4.Django使用celery
1. 配置celery 创建django项目celery_demo, 创建应用demo: django-admin startproject celery_demo python manage.p ...
- DRF - 序列化组件(GET/PUT/DELETE接口设计)、视图优化组件
一.序列化组件 基于上篇随笔的表结构 , 通过序列化组件的ModelSerializer设计如下三个接口 : GET 127.0.0.1:8000/books/{id} # 获取一条数据,返回值:{} ...
- Java微信公众平台开发【番外篇】(七)--公众平台测试帐号的申请
转自:http://www.cuiyongzhi.com/post/45.html 前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[ ...
- Shell脚本 判断
#Linux系统Shell脚本判断变量文件目录:权限.是否存在.空值.相等 1.字符串判断 str1 = str2 当两个串有相同内容.长度时为真str1 != str2 当串str1和str2不等时 ...
- 时区时差换算(GMT,UTC,PST,PDT)
2014年美国冬令时标准时间Stardand Time于11月2号开始实施,直到2015年3月8号为止. 冬令时,是指在冬天使用的标准时间.在使用日光节约时制(夏令时)的地区,夏天时钟拨快一小时,冬天 ...
- 201671010140. 2016-2017-2 《Java程序设计》java学习第一周
java学习第一周 本周是新学期的开端,也是新的学习进程的开端,第一次接触java这门课程,首先书本的厚度就给我一种无形的压力,这注定了,这门课程不会是轻松的,同时一种全新的学习方 ...
- POJ2187(凸包+旋转卡壳)
这道题目的大意是给出一组二维空间的顶点,计算其中距离最远的两个顶点之间的距离. 先说明凸包的概念和求法. 定义:对于多边形P,若将P中任意的两个点(包含边上)用一条线段连接,线段都落于该多边形中(含边 ...
- SQLSERVER索引在什么情况下会失效
索引并不是时时都会生效的,比如以下几种情况,将导致索引失效: 如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 注意:要想使用or,又想让索引生效,只能将or条件中的 ...
- 阿帕奇配置本地虚拟站点,XAMPP环境下
首先利用XAMPP搭建的阿帕奇环境,必须得启动,不能启动的话www.baidu.com 在XAMPP的目录下的apache,打开httpd-vhosts.conf文件 E:\XAMPP\apache\ ...
- 面试题: java多线程 背1
如果对什么是线程.什么是进程仍存有疑惑,请先Google之,因为这两个概念不在本文的范围之内. 用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现.说这个话其 ...