正题

题目链接:https://www.luogu.com.cn/problem/P4688


题目大意

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

然后mmm次询问给出三个区间,求这三个区间构成的可重集删去交集后剩下的数字个数和。

1≤n,m≤105,1≤ai≤1091\leq n,m\leq 10^5,1\leq a_i\leq 10^91≤n,m≤105,1≤ai​≤109


解题思路

考虑用总个数减去重复的个数。

那么现在问题是怎么求三个区间的交集。

假设不考虑重复的数的情况下我们可以莫队处理出三个区间的bitsetbitsetbitset然后或起来。

但是现在需要考虑重复的怎么处理,其实也很简单,因为我们是莫队,求出每个数字在序列中小于它的数字个数xxx,如果这个数字是第iii次出现就标号为x+ix+ix+i就好了,这样就不会重复了。

然后会发现空间不够大,直接把所有询问分成若干小组来处理就好了。

时间复杂度:O(nmω+mn)O(\frac{nm}{\omega}+m\sqrt n)O(ωnm​+mn​)

话说bitset的count竟然是O(nω)O(\frac{n}{\omega})O(ωn​)的/xia。


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cmath>
using namespace std;
const int N=1e5+10,M=2e4+10;
struct node{int l,r,t;
}q[N];
int n,m,k,T,d[N],b[N],c[N],ans[M];
bool v[M];bitset<N>bst[M],now;
bool cmp(node x,node y)
{return (x.l/T==y.l/T)?(x.r<y.r):(x.l/T<y.l/T);}
void Add(int x)
{now[x+c[x]]=1;c[x]++;return;}
void Del(int x)
{c[x]--;now[x+c[x]]=0;return;}
void solve(int m){k=0;memset(c,0,sizeof(c));now.reset();for(int i=1;i<=m;i++){int l1,r1,l2,r2,l3,r3;v[i]=0;scanf("%d%d%d%d%d%d",&l1,&r1,&l2,&r2,&l3,&r3);q[++k]=(node){l1,r1,i};q[++k]=(node){l2,r2,i};q[++k]=(node){l3,r3,i};ans[i]=r3+r2+r1-l1-l2-l3+3;bst[i].reset();}sort(q+1,q+1+k,cmp);int l=1,r=0;for(int i=1;i<=k;i++){while(r<q[i].r)r++,Add(b[r]);while(r>q[i].r)Del(b[r]),r--;while(l<q[i].l)Del(b[l]),l++;while(l>q[i].l)l--,Add(b[l]);if(!v[q[i].t])bst[q[i].t]=now,v[q[i].t]=1;else bst[q[i].t]&=now;}for(int i=1;i<=m;i++)printf("%d\n",ans[i]-bst[i].count()*3);return;
}
int main()
{//  freopen("xp1.in","r",stdin);
//  freopen("xp1.out","w",stdout);scanf("%d%d",&n,&m);T=sqrt(n);for(int i=1;i<=n;i++)scanf("%d",&c[i]),d[i]=c[i];sort(d+1,d+1+n);for(int i=1;i<=n;i++){int l=1,r=n;while(l<=r){int mid=(l+r)>>1;if(d[mid]>=c[i])r=mid-1;else l=mid+1;}b[i]=l;}for(int i=0;i<m;i+=2e4)solve(min((int)2e4,m-i));return 0;
}

P4688-[Ynoi2016]掉进兔子洞【莫队,bitset】相关推荐

  1. BZOJ4939[Ynoi2016]掉进兔子洞(莫队+bitset)

    题目链接 BZOJ 洛谷 扯点别的 听说这是比较亲民的一道Ynoi,于是我就去摸了一下,于是一个晚上就没了--不过至少还是学到了\(bitset\)维护可重集合的方法,以及当空间开不下时分组处理询问的 ...

  2. BZOJ4939 [YNOI2016]掉进兔子洞

    题目蓝链 Solution 首先,很显然这题是要用莫队来处理的.我们先把输入的数字另外排一下序,然后记录一下\(p_i\)表示每一个数字对应在排好序的数列里面是排第几个.询问的时候要把一个询问拆成\( ...

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

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

  4. P5355-[Ynoi2017]由乃的玉米田【莫队,bitset,根号分治】

    正题 题目链接:https://www.luogu.com.cn/problem/P5355 顺带一提的是P3674 小清新人渣的本愿是这题的弱化版,提交就可以A 题目大意 nnn个数字,询问 一个区 ...

  5. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4810 [题目大意] 给出一个数列,有三种区间查询, 分别查询区间是否存在两个数乘积为x ...

  6. P3674 小清新人渣的本愿 (莫队 + bitset)

    题目链接: P3674 小清新人渣的本愿 大致题意 给定一个长度为 n n n的序列, 有 m m m次询问操作. 1 l r x 表示询问 [ l , r ] [l, r] [l,r]是否存在 a ...

  7. 小清新人渣的本愿(莫队+bitset)

    小清新人渣的本愿 这两天写了些 b i t s e t bitset bitset的题,但都不想写题解...正巧这道题还结合了莫队,也是正在学习的,就记录一下吧. 题意: 给定一个 a a a数组,有 ...

  8. 洛谷 P3674 小清新人渣的本愿 [莫队 bitset]

    传送门 题意: 给你一个序列a,长度为n,有Q次操作,每次询问一个区间是否可以选出两个数它们的差为x,或者询问一个区间是否可以选出两个数它们的和为x,或者询问一个区间是否可以选出两个数它们的乘积为x ...

  9. BZOJ4810:[YNOI2017]由乃的玉米田(莫队,bitset)

    Description 由乃在自己的农田边散步,她突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐. 由乃认为玉米田不美,所以她决定出个数据结构题 这个题是这样的: 给你一个序 ...

最新文章

  1. 太有缘!和同专业师兄同名同姓同年同月同日生还是同导师是什么体验?
  2. pymongo连接mongodb的replset
  3. 5分钟学习基于Go,go-microservice-template,Minke的微服务
  4. iOS学习笔记19 地图(一)定位CoreLocation
  5. mysql 内联函数_C++之内联函数
  6. Linux学习之后台运行进程
  7. 【Drools二】打工人学习Drools基础语法
  8. python 发包爬取中国移动充值页面---可判断手机号是否异常
  9. CF888E Maximum Subsequence (Meet in the middle,贪心)
  10. 百度智能云“云+AI”新战略年终答卷,PaddlePaddle累计开发者数量265万人
  11. HEVC与VP9编码效率对比
  12. linux安全加固-三级等保(一)
  13. 支付宝扫描二维码支付
  14. 2022-2028年中国飞机电子飞行包(EFB)行业市场竞争状况及发展趋向分析报告
  15. index.highlight.max_analyzed_offset 偏移量设置
  16. Windows下主机名和IP映射设置
  17. 计算机丢失msvc80.dll,msvcr80.dll丢失如何解决-msvcr80.dll丢失的解决方法
  18. 华硕重装后进入bios_华硕电脑如何进入bios,教您如何华硕进入bios
  19. OFDM载波间隔_OFDM基本参数选择
  20. python中的middle_Python wx.EVT_MIDDLE_DCLICK属性代码示例

热门文章

  1. shell查找命令大全
  2. 交换系统接媒体服务器,基于软交换的媒体服务器的设计与实现
  3. set-cookie 和 cookie 的区别_Go Web 编程如何确保Cookie数据的安全传输
  4. PHP做闹钟APP,8款超好用的闹钟APP,专治各种赖床
  5. css-6 df15,webpack 样式文件的代码分割(15)
  6. c#事件的发布-订阅模型_微信灰度测试订阅号付费功能,小米推出最便宜5G套餐,腾讯辟谣高管猝死赔钱事件,核心期刊发布十岁儿童文章,这就是今天的其他大新闻!...
  7. require引入js vue_请教 关于使用require 引入vue 和公共js的问题
  8. css伪类元素加在元素前,CSS伪类:before在元素之前 :after 在元素之后实例讲解
  9. 单片机C语言中空语句,单片机C语言中的空语句.doc
  10. [Java网络编程]UDP通信程序练习