hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)
链接:http://hihocoder.com/problemset/problem/1236
思路;
有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大。并且答案需要加密,除了第一个答案,其他答案都要和上一个答案异或。
因为是强制在线所以不能用cdq分治写。。我们可以用stl里面的bitset来写这道题,但是因为数据还是太大了,这里我们可以用分块处理下,降低空间复杂度,需要用的时候直
接二分查找需要的块,预处理后可以o(1)获取前k-1个块的信息,然后我们对当前块逐个更新下就好了。
这里 bit[i][j]代表第i维前j个块有多少个人。
实现代码:
#include<bits/stdc++.h>
using namespace std;
const int M = 5e4+; struct node{
int val,id;
node(){};
node(int val,int id):val(val),id(id){}
bool operator < (const node &b) const{
if(val == b.val) return id < b.id;
return val < b.val;
}
}a[][M];
bitset<M>bit[][];
bitset<M>ans;
bitset<M>temp;
int block;
int num; int main()
{
int t,n,m,q;
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i ++)
for(int j = ;j <= ;j ++)
scanf("%d",&a[j][i].val),a[j][i].id = i; for(int i = ;i <= ;i ++) sort(a[i]+,a[i]+n+);
block = sqrt(n);
//分块,预处理
for(int i = ;i <= ;i ++){
for(int j = ;(j-)*block < n;j ++){
bit[i][j].reset();
bit[i][j] = bit[i][j-];
int st = (j-)*block;
for(int k = ;k <= block&&st+k<=n;k ++){
bit[i][j].set(a[i][st+k].id);
}
}
} int q;
scanf("%d",&q);
int now[];
int pre = ;
while(q--){
for(int i = ;i <= ;i ++){
scanf("%d",&now[i]);
now[i]^=pre;
}
ans.reset();
for(int i = ;i <= ;i ++){
int tmp = lower_bound(a[i]+,a[i]+n+,node(now[i],n+))-a[i]-;
tmp = tmp/block;
temp = bit[i][tmp];//获取之前块的信息
for(int j = tmp*block+;a[i][j].val<=now[i]&&j<=n;j++){ //当前块这个更新
temp.set(a[i][j].id);
}
if(i == )
ans = temp;
else
ans &= temp;
}
int num = ans.count();
pre = num;
printf("%d\n",num);
}
}
return ;
}
hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)的更多相关文章
- hdu 4049 2011北京赛区网络赛J 状压dp ***
cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...
- HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)
HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others) Memory Limit: ...
- HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)
HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...
- 2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组
2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组 [Problem Description] 给你一个\([1,n]\)的排列,查询\([l,r]\)区间内有多少对 ...
- hdu 4046 2011北京赛区网络赛G 线段树 ***
还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...
- 2017ICPC北京赛区网络赛 Visiting Peking University(简单思维)
描述 Ming is going to travel for n days and the date of these days can be represented by n integers: 0 ...
- hdu 4044 2011北京赛区网络赛E 树形dp ****
专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...
- hdu 4050 2011北京赛区网络赛K 概率dp ***
题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...
- hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***
插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...
随机推荐
- mysqldump备份数据库
1. 备份数据库-->sql文件 mysqldump -h192.168.1.100 -uuser -p123 --databases name > /tmp/databasedump.s ...
- LinqPad的变量比较功能
LinqPad是一个非常方便的C#工具(有免费版和收费版). 今天发现它的变量比较功能真是方便啊.且看3行代码产生如下结果: 说明:图中两个变量的成员属性值分别用红色和绿色背景标注:图很长,只截取了一 ...
- HDU 3400
一道很适合练习三分的题目三分套三分强不强 题意:给你平面上两条平行线段\(AB\)和\(CD\),一个人要从\(A\)走到\(D\),他在线段\(AB\)上的速度为\(P\),在\(CD\)上的速度为 ...
- Wechat login authorization(OAuth2.0)
一.前言 昨天小组开了个会,让我今天实现一个微信网页授权的功能,可以让用户在授权之后无需再次登录既可进入用户授权界面.在这之前我也从没接触过微信公众号开发之类的,也不知道公众号后台是啥样子的,自己所在 ...
- BugkuCTF 计算器
前言 写了这么久的web题,算是把它基础部分都刷完了一遍,以下的几天将持续更新BugkuCTF WEB部分的题解,为了不影响阅读,所以每道题的题解都以单独一篇文章的形式发表,感谢大家一直以来的支持和理 ...
- python基础学习笔记(一)
安装与运行交互式解释器 在绝大多数linux和 UNIX系统安装中(包括Mac OS X),Python的解释器就已经存在了.我们可以在提示符下输入python命令进行验证(作者环境ubuntu) f ...
- jenkins 上命令各种找不到问题
代码: 兵马未动,粮草先行 作者: 传说中的汽水枪 如有错误,请留言指正,欢迎一起探讨. 转载请注明出处. 在使用jenkins的时候,会使用一些命令行,有的时候明明在电脑的命令行(终端)可以执行 ...
- bootstrap完善按钮组bug
.btn.active { border: 1px solid #ff9400 !important; color: #ff9400 !important; } <div class=" ...
- Beta版发布说明
我们的作品“校友聊”软件的最终版本于6月19日最终发布了,下面我们将对自己的产品进行介绍. 在使用之前,首先要进行用户注册,用户可以自行设置自己的账号,姓名,密码,签名,头像等信息,头像信息也可以在文 ...
- js实现树形内容展示
1.首先这里有一个demo,里边有封装好的js文件.地址:http://files.cnblogs.com/files/feifeishi/dtree.zip 2.直接上代码 <div styl ...