------------更多Bitset的运用,请看这里http://www.cnblogs.com/hua-dong/p/8519739.html

由于在学cdq分治,看到了这道题。先来看一道题目

hihocoder1513):
  • 问题:给出每个人(n<=100000)的五门学科成绩,求出所有人:五门学科名次都比自己靠前的同学的人数
 
学过cdq分治的应该知道,这就是个五维偏序,只要一维排序,二维分治,然后树套树套树就能轻松搞定了。。。去他妈的

请拉到最下面,先感受一下代码。开始的确想过用集合,但是两秒放弃,因为无法用充分利用二进制,集合手动还得合并,而且得到集合的过程也得一一成绩对比,好像不可能完成。

oh,然后hihocoder介绍了强无敌的bitset,以前见过,但是没仔细看,因为那次只有60位,我好像用string解决的,没想到有这么强大(欠打)。

下面介绍以下bitset的基本使用信息,(大多是别人的东西,筛选后复制过来的),详细的还请移步百度文库:

和int long的比较 :

一般,int占4个字节,long占8个字节。而一个字节是由8个位组成的。 
粗略估计,int和BitSet的比例为4*8:1,即32:1(因为bitset只保存0或者1,一位就够了)。如果是long,差距就更大了。(所以你能想象开到上亿的数组感觉多么快乐吗。。。。)

和vector的比较:

类似于vector,bitset类是一种类模板;而与vector不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset时,要明确bitset含有多少位,须在尖括号内给出它的长度值:

bitset<32> bitvec;            //32位,全为0。

给出的长度值必须是常量表达式比如16,32,1313520,4008208820,etc。正如这里给出的,长度值必须定义为整型字面值常量或是已用常量值初始化的整数类型的const对象。

这条语句把bitvec定义为含有32个位的bitset对象。和vector的元素一样,bitset中的位是没有命名的,程序员只能按位置来访问它们。位集合的位置编号从0开始,因此,bitvec的位序是从0到31。以0位开始的位串是低阶位(low-order bit),以31位结束的位串是高阶位(high-order bit)。

bitset的初始化:

bitset<maxn> b;

b有maxn位,每位都为0

bitset<maxn> b(u);

b是unsigned long型u的一个副本

bitset<maxn> b(s);

b是string对象s中含有的位串的副本

bitset<maxn> b(s, pos, n);

b是s中从位置pos开始的n个位的副本

(string和int的方向有点差别,string是从右往左)

本题bitset的巧妙:

22,23行充分利用了相邻排名的关系,如果不用二进制,一一传递很费时。

26,28行充分利用了二进制的交集运算,如果不用二进制,也很麻烦。

 #include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<bitset>
using namespace std;
const int maxn=;
int Rank[maxn][],sa[maxn][],ans;
bitset<maxn+>Set[maxn][],tmp;
int main()
{
int n,i,j;
scanf("%d",&n);
for(i=;i<=n;i++)
for(j=;j<=;j++){
scanf("%d",&sa[i][j]);
Rank[sa[i][j]][j]=i;
}
for(j=;j<=;j++)
for(i=;i<=n;i++){
Set[i][j]=Set[i-][j];
Set[i][j].set(Rank[i-][j]);
}
for(i=;i<=n;i++){
tmp=Set[sa[i][]][];
for(j=;j<=;j++)
tmp&=Set[sa[i][j]][j];
printf("%d\n",tmp.count());
}
return ;
}

【整理】STL中的bitset(二进制华丽解决假五维偏序题)的更多相关文章

  1. STL中的BITSET运用

    胡小兔的OI博客C++ bitset 常用函数及运算符 对于一个叫做foo的bitset: foo.size() 返回大小(位数) foo.count() 返回1的个数 foo.any() 返回是否有 ...

  2. HihoCoder - 1513 bitset处理五维偏序

    题意:给出\(n<3e4\)个有序组\((a,b,c,d,e)\),求对第\(i\)个有序组有多少个\(j\)满足\((a_j<a_i,b_j<b_i,c_j<c_i,d_j& ...

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

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

  4. hihoCoder.1513.小Hi的烦恼(bitset 五维偏序)

    题目链接 五维偏序,对每一维维护bitset,表示哪儿为1(比它大),然后5个bitset与起来就能得到答案了. 具体实现可以用5*n个bitset,按排名搞个前缀和. 复杂度\(O(n^2/w)\) ...

  5. hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)

    链接:http://hihocoder.com/problemset/problem/1236 思路; 有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大.并且 ...

  6. HihoCoder - 1236 Scores (五维偏序,分块+bitset)

    题目链接 题意:给定n个五维空间上的点,以及m组询问,每组询问给出一个点,求五个维度都不大于它的点有多少个,强制在线. 神仙题 单独考虑每个维度,把所有点按这个维度上的大小排序,然后分成T块,每块用一 ...

  7. C++ STL 中 map 容器

    C++ STL 中 map 容器 Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它 ...

  8. 深入了解STL中set与hash_set,hash表基础

    一,set和hash_set简介 在STL中,set是以红黑树(RB-Tree)作为底层数据结构的,hash_set是以哈希表(Hash table)作为底层数据结构的.set可以在时间复杂度为O(l ...

  9. C++ STL中的常用容器浅谈

    STL是C/C++开发中一个非常重要的模板,而其中定义的各种容器也是非常方便我们大家使用.下面,我们就浅谈某些常用的容器.这里我们不涉及容器的基本操作之类,只是要讨论一下各个容器其各自的特点.STL中 ...

随机推荐

  1. nginx跟tp5无法加载控制器

    二. 另外502 bad gateway错误,可能是有PHP中的php-fpm.conf里 “ listen  fastcgi_pass /tmp/php-cgi.sock ”跟nginx的conf文 ...

  2. 关于cdn原理(就是内容分发网络)

    cdn,我理解其本质就是为了解决距离远产生的速度问题,使用就近的服务. 从中国请求美国一台服务器上的图片.一般比较慢,因为距离这么远,网络传输是存在损耗的,距离越远,传输的时间就越长.一般会看到浏览器 ...

  3. 解决“The remote certificate is invalid according to the validation procedure”问题

    在用HttpClient发起https请求时,遭遇了“The remote certificate is invalid according to the validation procedure”异 ...

  4. CRM - 权限

    一.引入权限组件 引入权限组件 rbac settings: 'rbac.apps.RbacConfig', 中间件: 'rbac.service.rbac.ValidPermission', 员工表 ...

  5. Linux eventfd分析

    2017-07-20 eventfd在linux中是一个较新的进程通信方式,和信号量等不同的是event不仅可以用于进程间的通信,还可以用户内核发信号给用户层的进程.eventfd在virtIO后端驱 ...

  6. Git学习-->如何通过Shell脚本自动定时将Gitlab备份文件复制到远程服务器?

    一.背景 在我之前的博客 git学习--> Gitlab如何进行备份恢复与迁移? (地址:http://blog.csdn.net/ouyang_peng/article/details/770 ...

  7. Jetty:配置概览-怎么配置Jetty

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/liuy_98_1001/article/details/27544671 Jetty POJO配置 ...

  8. IQKeyboardManager第三方库的使用

    IQKeyboardManager是iOS中解决键盘弹起遮挡UITextField/UITextView的一种很实用的工具.无需输入任何代码,不需要额外的设置.使用IQKeyboardManager的 ...

  9. [Axiom 3D]3.SceneManager场景管理器

    首先看看Axiom.Core命名空间下public abstract class SceneManager : DisposableObject A SceneManager organizes th ...

  10. 翻译:Bing地图瓦片体系

    Bing Maps Tile System Bing地图瓦片体系 原文链接:http://msdn.microsoft.com/en-us/library/bb259689.aspx Bing Map ...