hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题
题目大意:
每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数
因为强行要求在线查询,所以题目要求,每次当前给定的学生成绩都异或上一次的答案
先将学生按每一门成绩都排一次序
这里将学生分块成sqrt(n)的块数,然后在当前块中用bitset容器来记录含有学生的状态
这里可以记录状态的前缀和,因为比后面成绩好的,必然比前面的学生的成绩也好
查询的时候只要查到正好比他高的学生属于哪一块,这样只要访问sqrt(n)次了
最后将5次得到的答案进行与操作就可以了
#include<bits/stdc++.h>
using namespace std;
#define N 50001
#define pii pair<int,int>
int n , m , q , block;
bitset<N> bs[][]; //记录前缀或值和
pii val[][N]; void read()
{
scanf("%d%d" , &n , &m);
for(int i= ; i<n ; i++){
for(int j= ; j< ; j++){
scanf("%d" , &val[j][i].first);
val[j][i].second = i;
}
}
for(int i= ; i< ; i++) sort(val[i] , val[i]+n); block = (int)sqrt(n+0.5);
int i , j , k , index;
for(i= ; i< ; i++){
for(j= , index= ; j<n ; j+=block , index++){
int last = min(j+block,n);
bs[i][index].reset();
for(k=j ; k<last ; k++){
bs[i][index].set(val[i][k].second);
}
if(index) bs[i][index] |= bs[i][index-];
// cout<<i<<" "<<j<<" "<<bs[i][index].to_string()<<endl;
}
}
} int find_pos(int k , int x)
{
int l= , r=n- , ans=-;
while(r>=l){
int m=(l+r)>>;
if(val[k][m].first<=x) l=m+ , ans=m;
else r=m-;
}
return ans;
} bitset<N> getStatus(int k , int x)
{
int pos = find_pos(k , x);
bitset<N> ans;
if(pos<) return ans.reset();
int len = (pos+)/block;
int st = block*len;
if(len>=) ans = bs[k][len-];
else ans.reset();
for(int i=st ; i<=pos ; i++)
ans.set(val[k][i].second);
return ans;
} void query()
{
int x , last=;
bitset<N> ans[];
scanf("%d" , &q);
while(q--){
for(int i= ; i< ; i++) ans[i].reset();
for(int i= ; i< ; i++){
scanf("%d" , &x);
x ^= last;
ans[i] = getStatus(i , x);
if(i) ans[i] &= ans[i-];
// cout<<i<<" "<<x<<" "<<ans[i].to_string()<<endl;
}
last = ans[].count();
printf("%d\n" , last);
}
} int main()
{
// freopen("a.in" , "r" , stdin);
int T;
scanf("%d" , &T);
while(T--){
read();
query();
}
return ;
}
hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题的更多相关文章
- hihocoder1236(北京网络赛J):scores 分块+bitset
北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查 ...
- 2015北京网络赛 J Scores bitset+分块
2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...
- 2015北京网络赛 J Clarke and puzzle 求五维偏序 分块+bitset
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc20 ...
- Hiho coder 1236 2015 北京网络赛 Score
五维偏序..一开始被吓到了,后来知道了一种BITSET分块的方法,感觉非常不错. 呆马: #include <iostream> #include <cstdio> #incl ...
- 2015北京网络赛 Couple Trees 倍增算法
2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道. 解法来自 q ...
- 2015北京网络赛 D-The Celebration of Rabbits 动归+FWT
2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x ...
- 2015北京网络赛 G题 Boxes bfs
Boxes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingonl ...
- 2015北京网络赛 H题 Fractal 找规律
Fractal Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingo ...
- 2015北京网络赛 A题 The Cats' Feeding Spots 暴力
The Cats' Feeding Spots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acm ...
随机推荐
- Android开发面试经——5.常见面试官提问Android题①
版权声明:本文为寻梦-finddreams原创文章,请关注:http://blog.csdn.net/finddreams 关注finddreams博客: http://blog.csdn.net/f ...
- haskell rust相关文章
Combining Rust and Haskell http://tab.snarc.org/posts/haskell/2015-09-29-rust-with-haskell.html
- JAVA调用C语言写的SO文件
JAVA调用C语言写的SO文件 因为工作需要写一份SO文件,作为手机硬件IC读卡和APK交互的桥梁,也就是中间件,看了网上有说到JNI接口技术实现,这里转载了一个实例 // 用JNI实现 // 实例: ...
- Python标准库06 子进程 (subprocess包)
这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说, ...
- Java 数据类型之间的转换 拆分字符串 Date/Calendar的转换
数据类型转换 1. String - Int String str="123"; int i=1; int str=Integer.parseInt(str); String i= ...
- ajax中向HTML页面中指定位置添加信息
$.ajax({ type : "POST", beforeSend : function() { showLoader("数据加载中...");// ...
- GreenPlum简单性能测试与分析
版权声明:本文由黄辉原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/195 来源:腾云阁 https://www.qclou ...
- [转]用Python读写Excel文件
[转]用Python读写Excel文件 转自:http://www.gocalf.com/blog/python-read-write-excel.html#xlrd-xlwt 虽然天天跟数据打交 ...
- PHP Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compression'
安装phpcms过程中,会遇到Warning: ob_start() : output handler 'ob_gzhandler conflicts with 'zlib output compr ...
- ARM流水线关键技术分析与代码优化
引 言 流水线技术通 过多个功能部件并行工作来缩短程序执行时间,提高处理器核的效率和吞吐率,从而成为微处理器设计中最为重要的技术之一.ARM7处理器核使用了典型三级流 水线的冯·诺伊曼结构,AR ...