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 ...
随机推荐
- 工作流学习——重要概念扫盲篇一步曲 (zhuan)
http://blog.csdn.net/zwk626542417/article/details/46592471 ***************************************** ...
- ulua slua 下载地址
ulua http://www.yanyulin.info/pages/2015/01/27193946190814.html http://www.manew.com/blog-27966-25 ...
- Lua 栈中元素的位置
Lua与C.C#等的交互是通过栈来实现的,每次插入元素都是放在栈顶(top),至于元素的index,可以使用正数和负数两种方式, 如取栈底开始至第index个元素 -index = gettop - ...
- iOS蓝牙4.0开发(BLE)
智能设备 和 app 通过 BLE通讯的两种模型 模型一:设备提供数据,app 展示数据: 比如小米手环 模型二:app提供数据,设备接收: 模型与corebluetooth的对应关系: 模型一:智能 ...
- ubuntu server samba服务器配置
ubuntu server samba服务器配置 samba可以实现不同操作系统电脑之间的文件共享服务 如:mac os,linux,unix,windows,等 一:安装samba服务器 ubunt ...
- 【bzoj1046】上升序列
[bzoj1046]上升序列 题意 对于一个给定的S={a1,a2,a3,-,an},若有P={ax1,ax2,ax3,-,axm},满足(x1 < x2 < - < xm)且( a ...
- python 练习 5
#!/usr/bin/python # -*- coding: utf-8 -*- from collections import deque def z69(): '''猜牌术(1) 魔术师,最上面 ...
- Linux下修改系统时间并写入BIOS
我们一般使用“date -s”命令来修改系统时间.比如将系统时间设定成2005年7月26日的命令如下. #date -s 07/26/2005 将系统时间设定成下午11点12分0秒的命令如下. #da ...
- uploader上传
综述 Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持和常用插件,比如验证.图片预览.进度条等. 广泛应 ...
- (26)odoo中的序列运用
* 模块中增加序列 __openerp__.py : ... 'data': [ 'product_data.xml', ], ... ------ ...