Tournament
题意:
有 $n$ 个 $K$ 维向量,若向量A只要有任意一维大于向量B,则认为A可能打败B,将n个向量一个一个加入,求问对于每次加完后的向量集合:有几个向量可能活到最后。
解法:
考虑如果A可以打败B,则A到B连边,对得到的图tarjan,可以发现可能活到最后的向量在同一强联通分量。
考虑加入一个向量x,当x的每一维都大于给定强连通分量的Max,或都小于Min时,x才不能加入当前强连通分量。
这样可以发现,最终强连通分量构成一条链,用set维护这条链,每次lower_bound合并即可。
#include <bits/stdc++.h> #define LL long long
#define LD double
#define FOR(i,a,b) for (int i = (a);i <= (b); i++)
#define DFOR(i,a,b) for (int i = (a);i >= (b); i--)
#define debug(x) cerr << "debug: " << (#x) << " = " << (x) <<endl;
#define PI acos(-1)
#define mp make_pair
#define pb push_back
#define itr iterator
#define bit(x) (1LL<<(x))
#define lb(x) ((x)&(-x))
#define sqr(x) ((x)*(x))
#define gn 3
#define l(x) ch[x][0]
#define r(x) ch[x][1]
#define y0 Y0
#define y1 Y1
#define y2 Y2
#define fir first
#define sec second using namespace std; const int N = ; int n,K; struct node {
int M[], m[], sum;
bool operator < (const node &tmp)const {
FOR(i, , K-) if(M[i] > tmp.m[i]) return false;
return ;
}
}; multiset<node> tp; int main() {
scanf("%d %d", &n, &K);
node tmp;
FOR(i, , n) {
FOR(i, , K-) {
scanf("%d", &tmp.m[i]);
tmp.M[i] = tmp.m[i];
}
tmp.sum = ;
auto xx = tp.lower_bound(tmp);
while(xx != tp.end() && !(tmp < *xx)) {
FOR(i, , K-) {
tmp.m[i] = min(tmp.m[i], xx->m[i]);
tmp.M[i] = max(tmp.M[i], xx->M[i]);
}
tmp.sum += xx->sum;
tp.erase(xx++);
}
tp.insert(tmp);
printf("%d\n", tp.rbegin()->sum);
}
return ;
}
Tournament的更多相关文章
- Codeforces CF#628 Education 8 A. Tennis Tournament
A. Tennis Tournament time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Rock-Paper-Scissors Tournament[HDU1148]
Rock-Paper-Scissors TournamentTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Ja ...
- CF 628A --- Tennis Tournament --- 水题
CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...
- ural 1218. Episode N-th: The Jedi Tournament
1218. Episode N-th: The Jedi Tournament Time limit: 1.0 secondMemory limit: 64 MB Decided several Je ...
- URAL 1218 Episode N-th: The Jedi Tournament(强连通分量)(缩点)
Episode N-th: The Jedi Tournament Time limit: 1.0 secondMemory limit: 64 MB Decided several Jedi Kni ...
- Educational Codeforces Round 13 E. Another Sith Tournament 概率dp+状压
题目链接: 题目 E. Another Sith Tournament time limit per test2.5 seconds memory limit per test256 megabyte ...
- CodeForce 356A Knight Tournament(set应用)
Knight Tournament time limit per test 3 seconds memory limit per test 256 megabytes input standard ...
- 遗传算法selection总结-[Fitness, Tournament, Rank Selection]
假设个体(individual)用\(h_i\)表示,该个体的适应度(fitness)为\(Fitness(h_i)\),被选择的概率为\(P(h_i)\). 另外假设种群(population)的个 ...
- 【CF913F】Strongly Connected Tournament 概率神题
[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...
- 【CF878C】Tournament set+并查集+链表
[CF878C]Tournament 题意:有k个项目,n个运动员,第i个运动员的第j个项目的能力值为aij.一场比赛可以通过如下方式进行: 每次选出2个人和一个项目,该项目能力值高者获胜,败者被淘汰 ...
随机推荐
- 【leetcode刷题笔记】Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...
- URL重定向之一.htaccess文件和AllowOverride指令
通常利用Apache的rewrite模块对URL进行重写的时候,rewrite规则会写在 .htaccess文件里.但是要使Apache能够正常读取 .htaccess文件的内容,就必须对 .htac ...
- Java -- Swing 组件使用
1. 示例1 public class Main { JFrame f = new JFrame(); Icon okIcon = new ImageIcon("/home/test/sta ...
- 分享知识-快乐自己:Spring切入点的表达式和通知类型
1.切入点的表达式 表达式格式: execution([修饰符] 返回值类型 包名.类名.方法名(参数)) 其他的代替: <!-- 完全指定一个方法 --> <!-- <aop ...
- 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度
来源:http://my.oschina.net/pathenon/blog/65210 1.概述 跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.Mi ...
- Docker与LXC、虚拟化技术的区别——虚拟化技术本质上是在模拟硬件,Docker底层是LXC,本质都是cgroups是在直接操作硬件
先说和虚拟化技术的区别: 难道虚拟技术就做不到吗? 不不不,虚拟技术也可以做到,但是会有一定程度的性能损失,灵活度也会下降.容器技术不是模仿硬件层次,而是 在Linux内核里使用cgroup和name ...
- 10 Python 数据类型—集合
在Python set是基本数据类型的一种集合类型,它有可变集合(set())和不可变集合(frozenset)两种.创建集合set.集合set添加.集合删除.交集.并集.差集的操作都是非常实用的方法 ...
- JavaWeb_常用功能_01_文件上传
一个功能完善的JavaWeb应用,必不可少的一个功能就是文件的上传.无论是用户的头像等,还是用户需要上传的一系列资料,都是通过文件的上传功能实现的. 目前我们实现网站中关于文件的上传功能时,常用的是a ...
- HashMap,Hashtable,TreeMap ,Map
package com.wzy.list; import java.util.HashMap; import java.util.Hashtable; import java.util.Iterato ...
- Linux-shell 练习题(一)
1.实现批量添加20个用户,用户名为user1-20,密码为user+123 #!/bin/bash count=$ if [ -n "$count" ] then ;i<= ...