题目链接

题意:给定n个五维空间上的点,以及m组询问,每组询问给出一个点,求五个维度都不大于它的点有多少个,强制在线。

神仙题

单独考虑每个维度,把所有点按这个维度上的大小排序,然后分成T块,每块用一个bitset记录这个块以及之前的块中包含的点的集合的前缀和,并用mx[i][j]来记录第i维上大小为j的点所对应的最右边的块。对于每个询问的点,也是单独考虑每个维度,找到每个维度上对应的块,把这个块之前的块的前缀和加上,然后再暴力加上这个块中所有当前维度不超过它的点,五个维度取个交集就行了。

预处理复杂度$O(n+\frac{nT}{B})$,单次询问复杂度$O(\frac{n}{T}+\frac{n}{B})$,总复杂度$O(n+\frac{nT}{B}+\frac{qn}{T}+\frac{qn}{B})$,理论上T=B(约为64)时复杂度最低。

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e4+,M=,inf=0x3f3f3f3f;
struct D {
int x,i;
bool operator<(const D& b)const {return x<b.x;}
} a[][N];
int n,m,k,sqrtn,in[N],mx[][N],L[N/M],R[N/M],nb;
bitset<N> bs[][N/M],ans,now;
int solve(int* b) {
ans.set();
for(int i=; i<; ++i) {
now.reset();
int j=mx[i][b[i]];
if(j>)now|=bs[i][j-];
for(int k=L[j]; k<n&&a[i][k].x<=b[i]; ++k)now.set(a[i][k].i);
ans&=now;
}
return ans.count();
}
int main() {
int T;
for(scanf("%d",&T); T--;) {
scanf("%d%d",&n,&m);
memset(L,-,sizeof L);
memset(mx,,sizeof mx);
for(int j=; j<n; ++j) {nb=(in[j]=j/M)+; if(!~L[in[j]])L[in[j]]=j; R[in[j]]=j;}
for(int i=; i<; ++i)for(int j=; j<nb; ++j)bs[i][j].reset();
for(int i=; i<n; ++i)
for(int j=; j<; ++j)scanf("%d",&a[j][i].x),a[j][i].i=i;
for(int i=; i<; ++i)sort(a[i],a[i]+n);
for(int i=; i<; ++i) {
for(int j=; j<n; ++j) {
mx[i][a[i][j].x]=in[j];
bs[i][in[j]].set(a[i][j].i);
}
for(int j=; j<=m; ++j)mx[i][j]=max(mx[i][j],mx[i][j-]);
for(int j=; j<nb; ++j)bs[i][j]|=bs[i][j-];
}
scanf("%d",&k);
for(int ans=; k--;) {
int b[];
for(int i=; i<; ++i)scanf("%d",&b[i]),b[i]^=ans;
printf("%d\n",ans=solve(b));
}
}
return ;
}

HihoCoder - 1236 Scores (五维偏序,分块+bitset)的更多相关文章

  1. 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset

    Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...

  2. HihoCoder 1236 Scores - bitset - 分块

    Kyle is a student of Programming Monkey Elementary School. Just as others, he is deeply concerned wi ...

  3. hihoCoder.1513.小Hi的烦恼(bitset 五维偏序)

    题目链接 五维偏序,对每一维维护bitset,表示哪儿为1(比它大),然后5个bitset与起来就能得到答案了. 具体实现可以用5*n个bitset,按排名搞个前缀和. 复杂度\(O(n^2/w)\) ...

  4. HihoCoder - 1513 bitset处理五维偏序

    题意:给出\(n<3e4\)个有序组\((a,b,c,d,e)\),求对第\(i\)个有序组有多少个\(j\)满足\((a_j<a_i,b_j<b_i,c_j<c_i,d_j& ...

  5. 【整理】STL中的bitset(二进制华丽解决假五维偏序题)

    ------------更多Bitset的运用,请看这里http://www.cnblogs.com/hua-dong/p/8519739.html. 由于在学cdq分治,看到了这道题.先来看一道题目 ...

  6. hiho#1513 : 小Hi的烦恼 五维偏序

    hiho#1513 : 小Hi的烦恼 五维偏序 链接 hiho 思路 高维偏序用bitset,复杂度\((\frac{n^2}{32})\) 代码 #include <bits/stdc++.h ...

  7. hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)

    链接:http://hihocoder.com/problemset/problem/1236 思路; 有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大.并且 ...

  8. 偏序 分块+bitset

    题目描述 给定一个有\(n\)个元素的序列,元素编号为\([1,n]\),每个元素有\(k\)个属性\(p_1,p_2,p_3,...,p_k\) ,求序列中满足 \(i<j\)且 \(1 \l ...

  9. CDQ分治嵌套模板:多维偏序问题

    CDQ分治2 CDQ套CDQ:四维偏序问题 题目来源:COGS 2479 偏序 #define LEFT 0 #define RIGHT 1 struct Node{int a,b,c,d,bg;}; ...

随机推荐

  1. Keepalived 服务器状态监测

    keepalived简介: keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器 ...

  2. cart_购物车小程序

    #author:leon product_list= [ ('iphone',5800), ('mac pro',9800), ('bike',800), ('watch',6000), ('coff ...

  3. hadoop---Java 网络IO编程总结BIO、NIO、AIO

    转载请注明出处:http://blog.csdn.net/anxpp/article/details/51512200,谢谢! 本文会从传统的BIO到NIO再到AIO自浅至深介绍,并附上完整的代码讲解 ...

  4. bat脚本相关

    前期准备: 将要执行的脚本名字生成到一个txt文件 首先进入dos运行程序的目录下:输入dir *.jmx /B>FileScript.txt 采用dir *.jmx>list.txt 如 ...

  5. json字符串转化为json对象and 对象转化为 json字符串

    第一种方法: var data =evel('('+jsonstr+')') 解析:  这种方法是常用的方法, 即动态执行 javascript代码 在堆中存放数据. 存在安全问题. 第二种方法:   ...

  6. 【c++ primer, 5e】访问控制与封装

    练习 7.16 无,类的接口定义在public说明符之后,类的实现细节定义在private说明符之后. 7.17 有.类成员的默认访问权限不同.class的类成员默认为private,struct的则 ...

  7. VRChat简易教程3-往世界里导入模型和VRC接口初探

    一.准备工作 按前面的教程新建一个project,导入sdk并创建地面(Terrain)和VRCWorld. 本教程中我们学习如何导入别人做好的模型并使用VRC提供的接口来实现物品的抓取,模型素材(小 ...

  8. 详解Linux系统下PXE服务器的部署过程

    在大规模安装服务器时,需要批量自动化方法来安装服务器,来减少日常的工作量. 但是批量自动化安装服务器的基础是网络启动服务器(bootserver). 下面我们就介绍一下 网络启动服务器的 安装和配置方 ...

  9. 定制kali linux

    Kali Linux Ps: Kali发布撸~ 写了个如此装13的标题.这是一个Guide… 都是些基本操作撸.定制为王实推 ArchLinux.  各位看官继续………………………………………号外.L ...

  10. Binder机制-简单用法(一)

    Binder算是android里面比较难懂的部分了,但是非常重要,基本上,当我们深入到进程交互的阶段,Binder都是一个绕不开的槛,所以我也希望帮助大家更浅显地了解到这个知识点.笔者想通过3篇博文简 ...