STL中的BITSET运用
对于一个叫做foo的bitset:
foo.size() 返回大小(位数)
foo.count() 返回1的个数
foo.any() 返回是否有1
foo.none() 返回是否没有1
foo.set() 全都变成1
foo.set(p) 将第p + 1位变成1
foo.set(p, x) 将第p + 1位变成x
foo.reset() 全都变成0
foo.reset(p) 将第p + 1位变成0
foo.flip() 全都取反
foo.flip(p) 将第p + 1位取反
foo.to_ulong() 返回它转换为unsigned long的结果,如果超出范围则报错
foo.to_ullong() 返回它转换为unsigned long long的结果,如果超出范围则报错
foo.to_string() 返回它转换为string的结果
题目大意:求对于每个人来说,5门功课的名次都比他靠前的人数。
由提示中,我们就知道需要用bitset用解这题,(否则的话五维偏序得CDQ分治和数据结构套来套去)。主要思路就是如果我们知道单独每个科目名次靠前的集合,那么就是求5个集合的交集,但这个求交集上如果是用暴力的方法很明显会超时,这时候就需要运用到bitset了,其实c++/Java中的一种数据结构类似于数组,但可以直接对其做位运算。这样我们知道每个人的每门功课排第几,那么我们也可以知道每门功课排第几是谁。这样的话,bitset比当前名次靠前的人,如100100,就表示这么功课比当前名次靠前的有第0个人,和第3个人(我习惯从0开始),类似状压的思想。
#include<cstdio>
#include<bitset>
using namespace std;
const int N=;
int a[N][],b[][N];
//a[i][j]第i个人第j门功课排第几, b[i][j]第i功课排第j的是谁
bitset<N> c[][N],ans;//c[i][j]第i门功课排第j的人,名次比他高的有谁
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i=;i<n;i++)
for(int j=;j<;j++)
{
scanf("%d",&a[i][j]);
a[i][j]--;//因为我是从0开始的,所以这里--
b[j][a[i][j]]=i;
c[j][i].reset();
}
for(int i=;i<;i++)
for(int j=;j<n;j++)
{
c[i][j]=c[i][j-];
c[i][j].set(b[i][j-]);
}
for(int i=;i<n;i++)
{
ans=c[][a[i][]];
for(int j=;j<;j++)
ans&=c[j][a[i][j]];
printf("%d\n",ans.count());
}
}
return ;
}
二进制tql
更多的见nimphy的【整理】STL中的bitset(二进制华丽解决假五维偏序题)
STL中的BITSET运用的更多相关文章
- 【整理】STL中的bitset(二进制华丽解决假五维偏序题)
------------更多Bitset的运用,请看这里http://www.cnblogs.com/hua-dong/p/8519739.html. 由于在学cdq分治,看到了这道题.先来看一道题目 ...
- [C++]STL中的容器
C++11 STL中的容器 一.顺序容器: vector:可变大小数组: deque:双端队列: list:双向链表: forward_list:单向链表: array:固定大小数组: string: ...
- STL中的容器
STL中的容器 一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist ...
- STL中的二分查找——lower_bound 、upper_bound 、binary_search
STL中的二分查找函数 1.lower_bound函数 在一个非递减序列的前闭后开区间[first,last)中.进行二分查找查找某一元素val.函数lower_bound()返回大于或等于val的第 ...
- STL中的set容器的一点总结
1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构 ...
- STL中的next_permutation
给定一个数组a[N],求下一个数组. 2 1 3 4 2 1 4 3 2 3 1 4 2 3 4 1 ..... 在STL中就有这个函数: 1.参数是(数组的第一个元素,数组的末尾),注意这是前闭后开 ...
- 3.2 STL中的函数对象类模板
*: STL中有一些函数对象类模板,如下所示: 1)例如要求两个double类型的x 和y 的积,可以: multiplies<double>()(x,y); 该表达式的值就是x*y的值. ...
- C++的模板特化 和 STL中iterator_traits模板的偏特化
C++中有类模板和函数模板,它们的定义如下所示: 类模板: template<class T1,class T2> class C { //... }; 函数模板: template< ...
- C++的STL中vector内存分配方法的简单探索
STL中vector什么时候会自动分配内存,又是怎么分配的呢? 环境:Linux CentOS 5.2 1.代码 #include <vector> #include <stdio ...
随机推荐
- Escape(多记一个方向状态的BFS)迷宫逃脱
题意:https://www.nitacm.com/problem_show.php?pid=2266 vis记[x][y][dir]三个状态就行. 引用:https://blog.csdn.net/ ...
- ide的debug
webstom 新建立一个配置项 找到webpack.config.js,最后一行加上 devtool: "source-map" 然后点击debug
- 实例详解jQuery的无new构建
jQuery的无new构建 jQuery框架的核心就是从HTML文档中匹配元素并对其执行操作. 回想一下使用 jQuery 的时候,实例化一个 jQuery 对象的方法: // 无 new 构造 $( ...
- CF336C-Vasily the Bear and Sequence题解--贪心
题目链接 https://www.luogu.org/problemnew/show/CF336C 分析 一个比较妙的贪心 我们要让最后\(and\)起来的数被\(2^k\)整除且\(k\)最大,我们 ...
- 微信Emoji表情代码大全
参考网址 因PC端微信表情包不全,部分表情在PC中有显示问题,手机端微信不存在此问题,或者可以使用文字[微笑]这种方式添加微信表情 含义 标准 DoCoMo KDDI 软银 谷歌 微信 ✂复制这列
- vue.js devtools图标不亮
第一步:打开谷歌扩展程序 第二步:设置允许访问文件地址
- redis __详解 (转载自作者:孤独烟 出处: http://rjzheng.cnblogs.com/)
https://www.cnblogs.com/rjzheng/p/9096228.html [原创]分布式之redis复习精讲 引言 为什么写这篇文章? 博主的<分布式之消息队列复习精讲> ...
- Ubuntu Nginx Uwsgi Python布置服务器Django项目
1 安装python 3.6 ubuntu预装了2.7,不需要卸载预装库,直接安装python3.6(其实现在的阿里云18.04会给你自动装python2.7.15和3.6.8) 你可以分别查看一下 ...
- Delphi Tobject类
- 正则表达式 re模块的使用
一 正则表达式 首先, 我们在网页上进行行注册或者登陆的时候经常能看到一些格式上的错误提示. 比如:你在注册百度账号的时候 https://passport.baidu.com/v2/?reg&am ...