【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 [题目大意] 给出一个数列,每个询问给出三个区间,问除去三个区间共有的数字外, ...
随机推荐
- 【bzoj1026】[SCOI2009]windy数 数位dp
题目描述 windy定义了一种windy数.不含前导零且相邻两个数字之差至少为2的正整数被称为windy数. windy想知道,在A和B之间,包括A和B,总共有多少个windy数? 输入 包含两个整数 ...
- 【bzoj2259】[Oibh]新型计算机 堆优化Dijkstra
题目描述 Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算机的输入也很独特,假设输入序列中有 ...
- JavaScript中Switch使用
switch 语句用于基于不同的条件来执行不同的动作.使用 switch 语句来选择要执行的多个代码块之一. switch(n) { case 1: 执行代码块 1 break; case 2: 执行 ...
- P2587 [ZJOI2008]泡泡堂
题目描述 第XXXX届NOI期间,为了加强各省选手之间的交流,组委会决定组织一场省际电子竞技大赛,每一个省的代表队由n名选手组成,比赛的项目是老少咸宜的网络游戏泡泡堂.每一场比赛前,对阵双方的教练向组 ...
- [洛谷P3250][HNOI2016]网络
题目大意:给定一棵树.有三种操作: $0\;u\;v\;t:$在$u$到$v$的链上进行重要度为$t$的数据传输. $1\;x:$结束第$x$个数据传输. $2\;x:$询问不经过点$x$的数据传输中 ...
- C++STL简介
本文仅仅是个人学习的过程中结合网上博文,对STL的整理,也仅仅是简介.仅为个人学习笔记. 一.STL简介(摘自:晨光(Morning)) STL(Standard Template Library), ...
- 2016多校联合训练1 B题Chess (博弈论 SG函数)
题目大意:一个n(n<=1000)行,20列的棋盘上有一些棋子,两个人下棋,每回合可以把任意一个棋子向右移动到这一行的离这个棋子最近的空格上(注意这里不一定是移动最后一个棋子),不能移动到棋盘外 ...
- YBT 1.2 二分与三分
二分与三分: 二分(单调性),三分(单峰性),这章主要考数学,模拟,与读题!!! 链接: https://pan.baidu.com/s/1AJTl_0p5Lh4T1MmNwyJWzg 密码: j3j ...
- 警惕!Unity3D中UnityEngine.Object的一个小陷阱
先看看如下C#的脚本代码: 猜猜控制台打出来的是什么? In the bool parameter function, value info is: True 肯定出乎很多人的意料吧? transf ...
- POJ3177:Redundant Paths(并查集+桥)
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 19316 Accepted: 8003 ...