hihocoder 1513 小Hi的烦恼 (bitset优化)

大意: n个人, 5门课, 给定每个人每门课的排名, 对于每个人输出有多少人5门课都比他差.

明显是个5维偏序问题, 题目有保证排名均不同, 可以用bitset优化为$O(\frac{n^2}{\omega})$

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <math.h>
#include <set>
#include <map>
#include <queue>
#include <string>
#include <string.h>
#include <bitset>
#define REP(i,a,n) for(int i=a;i<=n;++i)
#define PER(i,a,n) for(int i=n;i>=a;--i)
#define hr putchar(10)
#define pb push_back
#define lc (o<<1)
#define rc (lc|1)
#define mid ((l+r)>>1)
#define ls lc,l,mid
#define rs rc,mid+1,r
#define x first
#define y second
#define io std::ios::sync_with_stdio(false)
#define endl ‘\n‘
#define DB(a) ({REP(__i,1,n) cout<<a[__i]<<‘ ‘;hr;})
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
ll gcd(ll a,ll b) {return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n) {ll r=1%P;for (a%=P;n;a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
ll inv(ll x){return x<=1?1:inv(P%x)*(P-P/x)%P;}
//head

const int N = 3e4+10;
int n;
bitset<N> f[N][5], tmp;
int rk[N][5], a[N][5];

int main() {
	scanf("%d", &n);
	REP(i,1,n) REP(j,0,4) {
		scanf("%d", a[i]+j);
		rk[a[i][j]][j] = i;
	}
	REP(i,1,n) REP(j,0,4) {
		f[i][j] = f[i-1][j];
		f[i][j].set(rk[i][j]);
	}
	REP(i,1,n) {
		tmp = f[a[i][0]-1][0];
		REP(j,1,4) tmp &= f[a[i][j]][j];
		printf("%d\n", int(tmp.count()));
	}
}

原文地址:https://www.cnblogs.com/uid001/p/10697871.html

时间: 2024-10-04 12:44:29

hihocoder 1513 小Hi的烦恼 (bitset优化)的相关文章

hihocoder#1513 : 小Hi的烦恼 bitset

目录 题目链接 题解 代码 题目链接 hihocoder#1513 : 小Hi的烦恼 题解 cdq 套cdq 套cdq 套cdq就完了呀 对每一科开n个bitset 表示该科目前i个有谁 每次查询都&起来就好了 代码 #include<cstdio> #include<bitset> #include<cstring> #include<algorithm> #define LL long long #define gc getchar() #def

hihocoder 1513 小Hi的烦恼——bitset

题目:http://hihocoder.com/problemset/problem/1513 自带的题解写得很好-- #include<cstdio> #include<cstring> #include<algorithm> #include<bitset> using namespace std; int rdn() { int ret=0;bool fx=1;char ch=getchar(); while(ch>'9'||ch<'0')

【hihoCoder】#1513 : 小Hi的烦恼

题解 我会五维数点辣 只要用个bitset乱搞就好了 记录一下rk[i][j]表示第j科排名为i的是谁 用30000 * 5个大小为30000的bitset s[i][j]是一个bitset表示第j科,排名为1 - i的人是多少 最后只要对于每个人,把每一维小于它的集合and起来,然后用count()函数输出里面1的个数 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <

01二维背包+bitset优化——hdu5890

口胡一种别的解法: 三重退背包,g1[j]k]表示不选x的选了j件物品,体积为k的方案数,g[0][0] = 1 , g1[j][k]=dp[j][k]-g1[j-1][k-a[x]] 然后按这样再退三层,最后看g3[10][87]的方案数是否非0即可,这样复杂度是O(50*50*50*10*87) 如果直接枚举删掉的数,然后用可行性二维01背包做 复杂度是O(50*50*50)*O(n*10*87) 再加上bitset优化第二维 复杂度/32 ,由于n比较小,所以也差不多 /* 在n个数里找到

hunnu 11545小明的烦恼——找路径 (最大流)

小明的烦恼--找路径  Time Limit: 2000ms, Special Time Limit:5000ms, Memory Limit:32768KB Total submit users: 45, Accepted users: 37 Problem 11545 : No special judgement Problem description   小明真的是个很厉害的人,每当老师有什么事时,总是会找到小明,二小明也总能解决,所以老师决定给小明一个奖励,给他额外的假期.小明当然很高兴

Codeforces 788C The Great Mixing(背包问题建模+bitset优化或BFS)

[题目链接] http://codeforces.com/problemset/problem/788/C [题目大意] 给出一些浓度的饮料,要求调出n/1000浓度的饮料,问最少需要多少升饮料 [题解] 设浓度为a,现在要求出系数x1,x2,x3……,使得x1*a1+x2*a2+x3*a3+……=n*(x1+x2+x3+……) 得a1*(x1-n)+a2*(x2-n)+a3*(x3-n)+……=0 假设现在有x1-n和x2-n,设其数值为x和y,那么一定有(x)*y+(-y)*x=0, x+y

hdu 5036 Explosion bitset优化floyd

http://acm.hdu.edu.cn/showproblem.php?pid=5036 题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个. 如果走了1,那么1能联通的顶点就可以直接走过去,其他不和1连通的,就需要炸坏.问需要炸弹的期望. 比如一副图是1-->2-->3的.那么期望是11 / 6 假如从1号点开始,1/3概率选中1号点开始,那么需要炸弹数是1(炸开一号),贡献是1/3 假如从2号点开始,1/3概率选中2号点开始,那么需要炸开2号点,然后

《Mysql 公司职员学习篇》 第一章 小A的烦恼

第一章  小A的烦恼 ----- 为什么学习数据库 和 如何选择数据库 小A是某公司的职员,公司数据部的员工,平常的大小工作,完全离不开EXCELL,而最近小A却越来越苦恼,不由的向好朋友小Y吐槽.小Y是某互联网公司的程序员,拥有多年开发经验. 小Y:"小A,你最近'印堂发黑',越来越疲劳无力,怎么?工作上遇见什么难题了?". 小A:"唉,别提了,最近公司发展迅速,数据量越来越大,我那'极品'电脑,关打开EXCELL就要卡个半天,再加上处理和计算,一天下来,卡顿的时间,都够我

BZOJ 3280: 小R的烦恼 &amp; BZOJ 1221: [HNOI2001] 软件开发

3280: 小R的烦恼 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 399  Solved: 200[Submit][Status][Discuss] Description 小R最近遇上了大麻烦,他的程序设计挂科了.于是他只好找程设老师求情.善良的程设老师答应不挂他,但是要求小R帮助他一起解决一个难题. 问题是这样的,程设老师最近要进行一项邪恶的实验来证明P=NP,这个实验一共持续n天,第i天需要a[i]个研究生来给他搬砖.研究生毕竟也是人,