链接: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+分块)的更多相关文章

  1. hdu 4049 2011北京赛区网络赛J 状压dp ***

    cl少用在for循环里 #include<cstdio> #include<iostream> #include<algorithm> #include<cs ...

  2. HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛)

    HDU 4046 Panda (ACM ICPC 2011北京赛区网络赛) Panda Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: ...

  3. HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011亚洲北京赛区网络赛)

    HDU 4041 Eliminate Witches! (模拟题 ACM ICPC 2011 亚洲北京赛区网络赛题目) Eliminate Witches! Time Limit: 2000/1000 ...

  4. 2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组

    2019-ACM-ICPC-徐州站网络赛- I. query-二维偏序+树状数组 [Problem Description] ​ 给你一个\([1,n]\)的排列,查询\([l,r]\)区间内有多少对 ...

  5. hdu 4046 2011北京赛区网络赛G 线段树 ***

    还带这么做的,卧槽,15分钟就被A了的题,居然没搞出来 若某位是1,则前两个为wb,这位就是w #include<cstdio> #include<cstring> #defi ...

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

  7. hdu 4044 2011北京赛区网络赛E 树形dp ****

    专题训练 #include<stdio.h> #include<iostream> #include<string.h> #include<algorithm ...

  8. hdu 4050 2011北京赛区网络赛K 概率dp ***

    题目:给出1-n连续的方格,从0开始,每一个格子有4个状态,左右脚交替,向右跳,而且每一步的步长必须在给定的区间之内.当跳出n个格子或者没有格子可以跳的时候就结束了,求出游戏的期望步数 0:表示不能到 ...

  9. hdu 4045 2011北京赛区网络赛F 组合数+斯特林数 ***

    插板法基础知识 斯特林数见百科 #include<iostream> #include<cmath> #include<cstdio> #include<cs ...

随机推荐

  1. WireShark抓包工具使用

    WireShark是一款网络封包分析软件,它抓取网络封包,并尽可能显示出最详细的封包资料. wireshark的准备工作 安装wireshark sudo apt-get install wiresh ...

  2. 使用Webuploader大文件分片传输

    背景:50G大文件的HTTP上传至服务器. 好了,根据这个命题,可以开始研究我们怎么做才能把这么大的文件上传成功. 分片上传是肯定的,断点续传也是要有的,进度可视化那就更好了,基于这些,我选择了Web ...

  3. Multiple Threads reading from the same file(转载)

    问 I have a xml file that needs to be read from many many times. I am trying to use the Parallel.ForE ...

  4. Yarn 入门

    Yarn 是快速.可靠.安全的 js 包管理器. 关键词: nodejs, 包管理, yarn 简介 Yarn 是快速.可靠.安全的 js 包管理器. 快速 - Yarn 会缓存它下载的每个包,所以无 ...

  5. OpenStack中的虚拟机(/dev/mapper/centos-root)进行磁盘扩容

    一.虚拟机上先扩展分区: 二.centos系统root登入,新建分区 2.1 [fdisk -l] 最大分区为/dev/sda2,说明新创建的分区将会是sda3(在后面的步骤会进行选择) 2.2 输入 ...

  6. React-使用imutable.js来管理store中的数据

    reducer.js中store的数据是不能改变的,用原始的方法要手动的保证store不被修改,存在风险.imutable.js可以生成一个不可改变的对象,可以避免掉自己不小心修改掉store的情况. ...

  7. Java 中单引号和双引号的区别

    引自:https://blog.csdn.net/hubianyu/article/details/39700367 单引号引的数据 是char类型的 双引号引的数据 是String类型的char定义 ...

  8. Centos7 -- glibc 升级失败、意外删除、故意删除后的处理方法

    第一部分:测试(如果不是想测试效果,可以直接跳到第三部分) 鉴于不久前 glibc-2.29 升级失败导致一系列的工具无法正常使用,‘’ 本着研究精神的我决定删除 glibc及其库文件 ,测试影响范围 ...

  9. Spring Boot(十六):使用 Jenkins 部署 Spring Boot

    Jenkins 是 Devops 神器,本篇文章介绍如何安装和使用 Jenkins 部署 Spring Boot 项目 Jenkins 搭建.部署分为四个步骤: 第一步,Jenkins 安装 第二步, ...

  10. 案例学python——案例二:连接数据库MySql

    调侃的话:案例一跑完之后,欣赏把玩了一番.人就有点飘飘然,昨天除了做饭吃饭,就是玩三国杀,江郎才尽,今天周一,不飘了,敲点代码,看看Python操作数据库有啥不一样的. 前期准备: 1.数据库 电脑上 ...