题目大意:

每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数

因为强行要求在线查询,所以题目要求,每次当前给定的学生成绩都异或上一次的答案

先将学生按每一门成绩都排一次序

这里将学生分块成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乱搞题的更多相关文章

  1. hihocoder1236(北京网络赛J):scores 分块+bitset

    北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查 ...

  2. 2015北京网络赛 J Scores bitset+分块

    2015北京网络赛 J Scores 题意:50000组5维数据,50000个询问,问有多少组每一维都不大于询问的数据 思路:赛时没有思路,后来看解题报告也因为智商太低看了半天看不懂.bitset之前 ...

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

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

  4. Hiho coder 1236 2015 北京网络赛 Score

    五维偏序..一开始被吓到了,后来知道了一种BITSET分块的方法,感觉非常不错. 呆马: #include <iostream> #include <cstdio> #incl ...

  5. 2015北京网络赛 Couple Trees 倍增算法

    2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 q ...

  6. 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 ...

  7. 2015北京网络赛 G题 Boxes bfs

    Boxes Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingonl ...

  8. 2015北京网络赛 H题 Fractal 找规律

    Fractal Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acmicpc2015beijingo ...

  9. 2015北京网络赛 A题 The Cats' Feeding Spots 暴力

    The Cats' Feeding Spots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/acm ...

随机推荐

  1. PO BO VO DTO POJO DAO 概念及其作用

    PO BO VO DTO POJO DAO 概念及其作用(附转换图) 博客分类: java javadaovopojobo        J2EE开发中大量的专业缩略语很是让人迷惑, 特别是对于刚毕业 ...

  2. 【Linux系统】防暴力破解

    在日志文件/var/log/secure 中可以看到涉及到安全方面的日志,可以查看是否有人尝试暴力破解及是否成功,对于肉鸡行为有一定帮助 思路基本上都是加强密码的复杂度,增加iptables配置黑名单 ...

  3. Sqlserver_判断该路径是否存在该文件

    declare @result int =0declare @path nvarchar(200)='d:\1.csv'execute master.dbo.xp_fileexist @path ,@ ...

  4. android,JNI创建进程,使用fork()

    long add(long x,long y) { pid_t fpid; //fpid表示fork函数返回的值 int count=0; fpid=fork(); if (fpid < 0) ...

  5. css制作简单的导航栏

    //css代码 #menu{ height: 65px; width:100%; background-color: rgba(0, 0, 0, 0.5);}#menu ul{ list-style: ...

  6. ajax的详细学习

    地址:http://www.cnblogs.com/Garden-blog/archive/2011/03/11/1981778.html

  7. js生成验证码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. linux笔记:软件包管理-软件包简介

    软件包分类: 1.源码包: 2.二进制包(在centos里就是RPM包.和源码包的区别在于已经经过编译.) 源码包的优点和缺点: RPM包的优点和缺点:

  9. DSP基础学习-ADC同步采样

    DSP基础学习-ADC同步采样 彭会锋 2015-04-28 20:31:06 在DSP28027 LauchPad学习过程中,关于ADC同步采样和顺序采样的区别稍加研究了一下,发现里面还真有些门道, ...

  10. (11)lambda表达式用法

    * lambda 简述    lambda只是一个表达式,函数体比def简单很多    lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去.    lam ...