【LOJ6201】【bzoj4939】【YNOI2016】掉进兔子洞
一道比较简单的莫队……
用bitset维护三个区间的交元素。
#include<bits/stdc++.h>
const int N=;
const int wy=;
#define UI unsigned int
#define rep(i,_x,_y) for (register int i=(_x);i<=(_y);i++)
#define rdp(i,_x,_y) for (register int i=(_x);i>=(_y);i--)
#define debug(x) cerr<<#x<<" = "<<x<<endl;
#define sqr(x) (x)*(x)
using namespace std;
int n,m,len,qaq,size,l1[N],r1[N],l2[N],r2[N],l3[N],r3[N],cal[(<<)+],A[N],b[N];
int block[N],pos[N],head[N],h[N];
inline int read(){
int f=,x=;char ch;
do{ch=getchar();if(ch=='-')f=-;}while(ch<''||ch>'');
do{x=x*+ch-'';ch=getchar();}while(ch>=''&&ch<='');
return f*x;
}
struct Data{
int x;int v;
bool operator <(const Data &f)const{return x<f.x;}
}a[N];
struct bs{
UI S[];
inline void update(int x){S[x>>]^=(1U<<(x&));}
inline int count(){int tot=;
rep(i,,) tot+=cal[S[i]>>]+cal[S[i]&];
return tot;
}
void clear(){memset(S,,sizeof(S));}
}now,c[];
inline bs operator ^ (bs &x,bs &y){
bs z;rep(i,,) z.S[i]=x.S[i]^y.S[i];
return z;
}
inline bs operator & (bs &x,bs &y){
bs z;rep(i,,) z.S[i]=x.S[i]&y.S[i];
return z;
}
struct Node{
int l,r,id;
Node(int l=,int r=,int id=):l(l),r(r),id(id){}
bool operator<(const Node &tmp)const{return block[l]==block[tmp.l]?(block[l]&)?r>tmp.r:r<tmp.r:l<tmp.l;}
}q[N];
inline void add(int x){h[x]++;now.update(head[x]+h[x]-);}
inline void del(int x){now.update(head[x]+h[x]-);h[x]--;}
inline void solve(){
now.clear();memset(h,,sizeof(h));memset(c,,sizeof(c));
int l=,r=;
sort(q+,q+len+);
for(int i=;i<=len;i++){
int lx=q[i].l,rx=q[i].r,id=q[i].id;
while(lx<l)add(A[--l]);
while(lx>l)del(A[l++]);
while(rx<r)del(A[r--]);
while(rx>r)add(A[++r]);
c[id]=c[id]&now;
}
}
int main(){
//freopen("xp1.in","r",stdin);
//freopen("xwd.out","w",stdout);
n=read();m=read();size=(int)sqrt(n+.);
rep(i,,(<<)-) cal[i]=cal[i>>]+(i&);
for(int i=;i<=n;i++)block[i]=(i-)/size+;
for(int i=;i<=n;i++)a[i].x=read(),a[i].v=i;
sort(a+,a+n+);
for(int i=;i<=n;i++)A[a[i].v]=a[i].x==a[i-].x?A[a[i-].v]:++qaq;
for(int i=;i<=n;i++)b[i]=A[i];
sort(b+,b+n+);
for(int i=;i<=n;i++)if(b[i]!=b[i-])head[b[i]]=i;
for(int i=;i<=m;i++){
l1[i]=read();r1[i]=read();l2[i]=read();r2[i]=read();l3[i]=read();r3[i]=read();
pos[i]=r1[i]+r2[i]+r3[i]-l1[i]-l2[i]-l3[i]+;
}
for(int i=;i<=m;i+=wy){
len=;
for(int j=i;j<=i+wy-;j++){
if(j>m)break;
q[++len]=Node{l1[j],r1[j],j-i+};
q[++len]=Node{l2[j],r2[j],j-i+};
q[++len]=Node{l3[j],r3[j],j-i+};
}
solve();
for(int j=i;j<=i+wy-;j++){
if(j>m)break;
printf("%d\n",pos[j]-*c[j-i+].count());
}
}
}
【LOJ6201】【bzoj4939】【YNOI2016】掉进兔子洞的更多相关文章
- BZOJ4939 Ynoi2016掉进兔子洞(莫队+bitset)
容易发现要求三个区间各数出现次数的最小值.考虑bitset,不去重离散化后and一发就可以了.于是莫队求出每个区间的bitset.注意空间开不下,做多次即可.输出的东西错了都能调一年服了我了. #in ...
- BZOJ4939: [Ynoi2016]掉进兔子洞(莫队 bitset)
题意 题目链接 一个长为 n 的序列 a. 有 m 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间剩下的数的个数和,询问独立. 注意这里删掉指的是一个一个删,不是把等于 ...
- bzoj千题计划320:bzoj4939: [Ynoi2016]掉进兔子洞(莫队 + bitset)
https://www.lydsy.com/JudgeOnline/problem.php?id=4939 ans= r1-l1+1 + r2-l2+1 +r3-l3+1 - ∑ min(cnt1[i ...
- bzoj4939: [Ynoi2016]掉进兔子洞
将权值排序,设权值x排序后在[l,r]出现,x在区间中出现k次,则用[l,l+k-1]为1,[l+k,r]为0来表示x的出现次数 用bitset表示可重集中每个元素的出现次数,用莫队处理出询问区间对应 ...
- 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 个询问,每次询问三个区间,把三个区间中同时出现的数一个一个删掉,问最后三个区间 ...
- BZOJ.4939.[Ynoi2016]掉进兔子洞(莫队 bitset 分组询问)
BZOJ 洛谷 删掉的数即三个区间数的并,想到bitset:查多个区间的数,想到莫队. 考虑bitset的每一位如何对应每个数的不同出现次数.只要离散化后不去重,每次记录time就可以了. 但是如果对 ...
- p4688 [Ynoi2016]掉进兔子洞
传送门 分析 我们考虑先将所有数离散化 之后我们对于每个状态用一个bitset来记录 其中第i段表示颜色i的信息 对于每一段信息均是段首若干1,剩余若干0表示这种颜色有多少个 于是我们不难想到莫队 答 ...
- [洛谷P4688][Ynoi2016]掉进兔子洞
题目大意:给定一个$n(n\leqslant10^5)$序列,$m(m\leqslant10^5)$个询问,每个询问给出$l_1,r_1,l_2,r_2,l_3,r_3$.令$s$为该三个区间的交集的 ...
- BZOJ 4939 [Ynoi2016]掉进兔子洞(莫队+bitset)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4939 [题目大意] 给出一个数列,每个询问给出三个区间,问除去三个区间共有的数字外, ...
随机推荐
- 【bzoj5110】[CodePlus2017]Yazid 的新生舞会 Treap
题目描述 求一个序列所有的子区间,满足区间众数的出现次数大于区间长度的一半. 输入 第一行2个用空格隔开的非负整数n,type,表示序列的长度和数据类型.数据类型的作用将在子任务中说明. 第二行n个用 ...
- Go语言【第七篇】:Go函数
Go语言函数 函数是基本的代码块,用于执行某个任务.Go语言最少有个main()函数,可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务.函数声明告诉了编译器函数的名称,返回类型和参数.Go ...
- 楼房 洛谷1382 && codevs2995
P1382 楼房 题目描述 地平线(x轴)上有n个矩(lou)形(fang),用三个整数h[i],l[i],r[i]来表示第i个矩形:矩形左下角为(l[i],0),右上角为(r[i],h[i]).地平 ...
- Chrome查看html样式基本操作-div
1. div 标签(白板,块级标签),想学会前端,只需要学会div+css就可以了. span 标签 (白板,行内标签) 2. Chrome审查元素的使用.右击浏览器--检查---可以看标签是块级还是 ...
- BZOJ1096:[ZJOI2007]仓库建设——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1096 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于 ...
- bzoj2326:[HNOI2011]数学作业(分段矩阵乘法)
题目大意:输入n(n<=10^18)和m,将1~n的整数连起来模m输出,比如n=13则输出12345678910111213模m的数. 设f[i]为1~i整数连起来模m的数,i的位数为k,则有f ...
- [zhuan]Dalvik 分析 - Class加载篇
http://blog.csdn.net/zhangyun438/article/details/17192787 内容如下: Java 源代码经过编译后会生成后缀为class的文件,也即字节码文件. ...
- H5背景音乐自动播放(兼容微信IOS,进程后台切换自动停止播放,本文例子为Vue写法)
<template> <audio src="./static/music.mp3" id="bgMusic" preload="a ...
- crontab使用进程锁解决冲突
想到一个问题,如果在crontab里有个定时任务设置为一分钟执行一次,但是它执行的时间可能会超过一分钟,此时crontab一分钟后会再次运行该脚本吗?这样会不会出现冲突呢?网上找了下,说可以用Linu ...
- HDU 3507 斜率优化dp
Print Article Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)To ...