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 搜索有关 ...
随机推荐
- WARNING: cell0 mapping not found - not syncing cell0
WARNING: cell0 mapping not found - not syncing cell0
- python 通过ftplib 实现上传下载
#!/usr/bin/python #-*- coding: utf-8 -*- from ftplib import FTP def ftpconnect() ftp_server = 'ftp.p ...
- 相关不同Linux系统的性能监控命令整理
Linux系统 查看系统版本情况: $uname -a 监控进程的CPU,MEM使用情况: $ps –aux 过滤方式命令:$ ps -aux|awk '{print $3,$4,$11}'|sort ...
- 自己写着玩的一个天气APP
打开的界面: 向上滑动,进入主界面: 省份界面: 城市界面: 加载天气界面: 显示天气界面: 侧滑,显示地区,然后根据天气来显示一首诗句(晴,多云,雪,雨什么的): 第一次启动App的时候才会加载数据 ...
- ASP.NET MVC 基于表达式的动态查询
项目源码地址:https://gitee.com/zhengwei804/DynamicCustomSearch
- python3.3 MD5
代码如下: # /usr/bin/python # -*- coding:utf-8 -*- import hashlib h=hashlib.md5() data = ' h.update(data ...
- easylogging++学习记录(一):接入
easylogging++是一个非常轻量级并且非常高效的一个日志库,支持文件配置,支持线程安全,并且其自定义格式非常的方便,最关键的是,其所有代码都集中在一个.h头文件之中,完全不需要引用第三方库,接 ...
- 4-3 线程安全性-原子性-synchronized
原子性它提供了互斥访问,同一时刻只能有一个线程来对它进行操作.能保证同一时刻只有一个线程来对其进行操作的,除了Atomic包之外,还有锁.JDK提供锁主要分两种,synchronized是一个Java ...
- Linux 程序和进程的关系
查看进程命令 ps ps -elf|grep init|grep -v grep 查看init进程ID号:ps aux |grep init |grep -v grep; ps aux 会把系统所有 ...
- Java c3p0 连接 MySQL
<?xml version="1.0" encoding="UTF-8"?> <!-- 需要导入c3p0驱动jar包和mysql驱动jar包 ...