HihoCoder#1513 : 小Hi的烦恼(五维数点 bitset 分块)
题意
Sol
五位数点问题,写个cdq分治套cdq分治套cdq分治套cdq分析就完了 可以用bitset搞
对于每一科开\(n\)个bitset,其中\(b[i]\)表示的排名为\(1 - i\)的人是哪些
查询的时候把每科的bitset &起来就行了
复杂度\(k\frac{n^2}{32}\)
然后可以分块加速一下
注意这里在预处理有个关于势能分析的操作:如果块内元素较少的话,可以每次跑根号个,然后和前面的|起来,如果元素较多的话直接从1开始跑
复杂度:\(k\frac{n\sqrt(n)}{32}\)
#include<bits/stdc++.h>
using namespace std;
const int MAXN = 30001;
inline int read() {
int x = 0, f = 1; char c = getchar();
while (c < '0' || c > '9') {if (c == '-') f = -1; c = getchar();}
while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
}
int N, a[5][MAXN], rak[5][MAXN], base = 1;
bitset<MAXN> B[5][175];
main() {
N = read(); base = sqrt(N);
for (int i = 1; i <= N; i++) for (int j = 0; j < 5; j++) a[j][i] = read(), rak[j][a[j][i]] = i;
for (int j = 0; j < 5; j++)
for (int i = 1; i * base <= N; i++)
for(int k = 1; k <= i * base; k++) B[j][i].set(rak[j][k]);
for (int i = 1; i <= N; i++) {
bitset<MAXN> tmp, cal; tmp.set();
for(int j = 0; j < 5; j++) {
cal.reset();
int now = a[j][i] / base;
cal |= B[j][now];
for(int k = now * base + 1; k <= a[j][i]; k++) cal.set(rak[j][k]);
tmp &= cal;
}
printf("%d\n", tmp.count() - 1);
}
}
HihoCoder#1513 : 小Hi的烦恼(五维数点 bitset 分块)的更多相关文章
- hiho#1513 : 小Hi的烦恼 五维偏序
hiho#1513 : 小Hi的烦恼 五维偏序 链接 hiho 思路 高维偏序用bitset,复杂度\((\frac{n^2}{32})\) 代码 #include <bits/stdc++.h ...
- hihocoder#1513 : 小Hi的烦恼 bitset
目录 题目链接 题解 代码 题目链接 hihocoder#1513 : 小Hi的烦恼 题解 cdq 套cdq 套cdq 套cdq就完了呀 对每一科开n个bitset 表示该科目前i个有谁 每次查询都& ...
- hihoCoder 1513 小Hi的烦恼
hihoCoder 1513 小Hi的烦恼 思路: 用bitset判断交集个数 代码: #include<bits/stdc++.h> using namespace std; #defi ...
- hihoCoder.1513.小Hi的烦恼(bitset 五维偏序)
题目链接 五维偏序,对每一维维护bitset,表示哪儿为1(比它大),然后5个bitset与起来就能得到答案了. 具体实现可以用5*n个bitset,按排名搞个前缀和. 复杂度\(O(n^2/w)\) ...
- hihocoder 1513 小Hi的烦恼——bitset
题目:http://hihocoder.com/problemset/problem/1513 自带的题解写得很好…… #include<cstdio> #include<cstri ...
- hihoCoder 1513 : 小Hi的烦恼 位运算好题
思路:考虑第i个同学,第一门课排名比他靠前的同学的集合是S1,第二门课是S2...第五门课是S5,很明显比这个同学每门课程都优秀的同学就是S1&S2&S3&S4&S5, ...
- hihocoder 1513 小Hi的烦恼 (bitset优化)
大意: n个人, 5门课, 给定每个人每门课的排名, 对于每个人输出有多少人5门课都比他差. 明显是个5维偏序问题, 题目有保证排名均不同, 可以用bitset优化为$O(\frac{n^2}{\om ...
- 【hihoCoder】#1513 : 小Hi的烦恼
题解 我会五维数点辣 只要用个bitset乱搞就好了 记录一下rk[i][j]表示第j科排名为i的是谁 用30000 * 5个大小为30000的bitset s[i][j]是一个bitset表示第j科 ...
- HihoCoder - 1236 Scores (五维偏序,分块+bitset)
题目链接 题意:给定n个五维空间上的点,以及m组询问,每组询问给出一个点,求五个维度都不大于它的点有多少个,强制在线. 神仙题 单独考虑每个维度,把所有点按这个维度上的大小排序,然后分成T块,每块用一 ...
随机推荐
- JS字符串替换(jQuery)
①自己封装的一个方法String.format String.format = function() { var s = arguments[0]; for (var i = 0; i < ar ...
- 2019.2.26考试T2 矩阵快速幂加速DP
\(\color{#0066ff}{题解 }\) 可以发现, 数据范围中的n特别小,容易想到状压 可以想到类似于状压DP的思路,按列进行转移 那么应该有3维,\(f[i][j][k]\)代表到第i列, ...
- P3398 仓鼠找sugar 树上路径相交判断
\(\color{#0066ff}{题目描述}\) 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐 ...
- webpack基础理解以及使用搭建
1.webpack 是一个前端资源加载/打包工具,前端的常用资源都可以作为一个模板导出,我们在代码中直接引用即可,最后把我们的代码打包整合起来. 前端资源,包括(js,css,图片,模块)等. 下面是 ...
- [AH2017/HNOI2017]礼物(FFT)
[Luogu3723] [DarkBZOJ4827] 题解 首先,有一个结论:两个手环增加非负整数亮度,等于其中一个增加一个整数亮度(可以为负) 设增加亮度为x.求\(\sum_{i=1}^{n}(a ...
- SvcUtil.exe导入WCF
1.SvcUtil.exe路径 vs2012.2013为C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin 2.添加外部工具 vs-工具-- ...
- JWT(JSON Web Token)原理简介
原文:http://www.fengchang.cc/post/114 参考了一下这篇文章:https://medium.com/vandium-software/5-easy-steps-to-un ...
- vue懒加载 路由 router 的编写(resolve)
如果用import引入的话,当项目打包时路由里的所有component都会打包在一个js中,造成进入首页时,需要加载的内容过多,时间相对比较长.当你用require这种方式引入的时候,会将你的comp ...
- PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件
public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...
- java——如何通过class调用该类的方法并获得返回值?(反射)
demo: public class T{ public static void main(String[] args) throws Exception{ //获得Person的Class对象 Cl ...