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 搜索有关 ...
随机推荐
- Vue 简单的总结一
let 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 const 变量 1. 局部作用域 2. 不会存在变量提升 3. 变量不能重复声明 4. 只能声明常量,不可变得量 th ...
- 01Javascript简介
01 - Javascript 简介 web前端有三层: HTML:从语义的角度, 描述页面结构 CSS: 从审美的角度,描述样式(美化页面) JavaScript: 从交互的角度 , 描述行为(提升 ...
- srvctl和crs_start命令无法启动oracle RAC实例, 但sqlplus可以启动
今天遇到一个奇怪问题,发现srvctl和crs_start命令无法启动Oracle RAC实例,但用sqlplus却可以正常启动.最终发现原因是在OCR中数据库的状态变成了disable,将此状态更改 ...
- Burpsuite模块—-Intruder模块详解
一.简介 Burp Intruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,Burp Intruder 是高度可配置的,并被用来在广范围内进行自动化攻击.你可以使用 Burp Intr ...
- EasyGui
EasyGui 在IDLE上运行EasyGui可能存在冲突 EasyGui是运行在Tkinter上并哟拥有自身的事件循环,而IDLE也是Tkinter写的一个应用程序并页拥有自身的事件循环.两者同时运 ...
- 04.webservice客户端调用
不要求所有的元素都理解,真正做开发的时候,有一些必须是要用的. 以后我们做开发的时候服务访问点的集合就一个服务的访问点.服务访问点绑定了具体的一个服务类,绑定的这个东西它本身也是一个元素.往上找,四个 ...
- 卡尔曼滤波总结——KF、EFK、UKF
1.用途 现实是我们的处理和测量模型都是非线性的,结果就是一个不规则分布,KF能够使用的前提就是所处理的状态是满足高斯分布的,为了解决这个问题,EKF是寻找一个线性函数来近似这个非线性函数,而UKF就 ...
- 409. Longest Palindrome 最长对称串
[抄题]: Given a string which consists of lowercase or uppercase letters, find the length of the longes ...
- 12-在eclipse上安装lxml
1.可用easy_install安装方式,也可以用pip的方式: pip install lxml 2.安装完毕:写代码导包时提示错误,这是需要配置一下eclipse,是因为它没有更新导入的包,所以需 ...
- c语言交换两个变量的值
有两个变量a 和b,想要交换它们的值 int a,b; 能不能这样操作呢? b=a; a=b; 不能啊,这样操作的意思是把a的值放到b中,然后b中的值已经被覆盖掉了,已经不是b原来的那个值了,所以是没 ...