Contest

题目

链接

题目描述

\(n\) 支队伍一共参加了三场比赛。

一支队伍 \(x\) 认为自己比另一支队伍 \(y\) 强当且仅当 \(x\) 在至少一场比赛中比 \(y\) 的排名高。

求有多少组 \((x,y)\) ,使得 \(x\) 自己觉得比 \(y\) 强,\(y\) 自己也觉得比 \(x\) 强。

\((x, y), (y, x)\)算一组。

输入描述

第一行一个整数 \(n\) ,表示队伍数; 接下来 \(n\) 行,每行三个整数 \(a[i], b[i], c[i]\) ,分别表示 \(i\) 在第一场、第二场和第三场比赛中的名次;\(n\) 最大不超过 \(200000\)

输出描述

输出一个整数表示满足条件的 \((x,y)\) 数;\(64\) bit请用lld

示例1

输入

4
1 3 1
2 2 4
4 1 2
3 4 3

输出

5

题解

思路

知识点:分治,排序。

这是一道多维偏序题,可以CDQ分治,但鄙人还不会,这里用逆序对的。

注意到,一对的三场比赛至少一强一弱,由于\((x, y), (y, x)\)算一组,因此在计算一场比赛时只管弱或者强的一种可能就行,另一种可能是重复的。

我们对第一场比赛排序,使得 \(i<j\) 时 \(i\) 比 \(j\) 弱。现在去找第二场的逆序对,得到的答案便是第一场弱第二场强的对,但第三场不定;再对第一场排序,找第三场的逆序数,就找到了第一场弱第三场强的对,但第二场不定;再对第二场排序,找第三场的逆序数,就找到了第二场弱第三场强的对,但第一场不定。

于是我们得到了 \(6\) 组情况(1代表强,0代表弱):

序号/场次 第一场 第二场 第三场
1 0 1 1
2 0 1 0
3 0 1 1
4 0 0 1
5 1 0 1
6 0 0 1

我们发现 \(1\) 和 \(3\) 重复了,\(4\) 和 \(6\) 重复了。\(2\) 和 \(5\) 是互反的,由于每个组都是一种情况的全部可能性,而两种情况互反算一组,所以重复了。因此最终答案是三种情况相加除以 \(2\) 。

时间复杂度 \(O(n\log n)\)

空间复杂度 \(O(n)\)

代码

#include <bits/stdc++.h>

using namespace std;

struct team {
int a, b, c;
}P[200007]; int Q[200007], R[200007];
long long ans = 0; void merge_sort(int l, int r) {
if (l == r) return;
int mid = l + r >> 1;
merge_sort(l, mid);
merge_sort(mid + 1, r);
int i = l, j = mid + 1, k = l;
while (i <= mid && j <= r) {
if (Q[i] <= Q[j]) R[k++] = Q[i++];
else R[k++] = Q[j++], ans += mid - i + 1;
}
while (i <= mid) R[k++] = Q[i++];
while (j <= r)R[k++] = Q[j++];
for (int i = l;i <= r;i++) Q[i] = R[i];
} int main() {
std::ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int n;
cin >> n;
for (int i = 0;i < n;i++) cin >> P[i].a >> P[i].b >> P[i].c; sort(P, P + n, [&](team a, team b) {return a.a < b.a;});
for (int i = 0;i < n;i++) Q[i] = P[i].b;
merge_sort(0, n - 1); for (int i = 0;i < n;i++) Q[i] = P[i].c;
merge_sort(0, n - 1); sort(P, P + n, [&](team a, team b) {return a.b < b.b;});
for (int i = 0;i < n;i++) Q[i] = P[i].c;
merge_sort(0, n - 1); cout << ans / 2 << '\n';
return 0;
}

Contest的更多相关文章

  1. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  2. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  3. 2016 Multi-University Training Contest 2 D. Differencia

    Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tot ...

  4. 2016 Multi-University Training Contest 1 G. Rigid Frameworks

    Rigid Frameworks Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  5. hdu-5988 Coding Contest(费用流)

    题目链接: Coding Contest Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Ot ...

  6. ZOJ 3703 Happy Programming Contest

    偏方记录背包里的物品.....每个背包的价值+0.01 Happy Programming Contest Time Limit: 2 Seconds      Memory Limit: 65536 ...

  7. 2012 Multi-University Training Contest 9 / hdu4389

    2012 Multi-University Training Contest 9 / hdu4389 打巨表,实为数位dp 还不太懂 先这样放着.. 对于打表,当然我们不能直接打,这里有技巧.我们可以 ...

  8. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  9. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  10. 校际联合Contest

    每次开一个坑都像是重新被碾压的预感 最近的新闻,以前很喜欢乔任梁的<复活>...然后他就死了...感觉我再多愁善感一点的话...就要悲伤逆流成河了吧... Contest 09/24(乐滋 ...

随机推荐

  1. 2021.07.02 P1383 高级打字机题解(可持久化平衡树)

    2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...

  2. Dom基础(一):attribute和properrty的区别

    properrty:修改对象属性不会体现到html结构中,针对DOM节点自带属性(id,className,style) attribute:修改html属性,会改变html结构,大多可以添加自定义属 ...

  3. Day 004:PAT练习--1033 旧键盘打字 (20 分)

    题目要求如下:   我一开始理解的题意:第一行给出的是坏掉的键,这里的规则应该是这样的:   1."对应英文字母的坏键以大写给出",若有字母,则与其相关的字母全部不能输出,不论是大 ...

  4. ThreadLocal的原理及产生的问题

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. ThreadLocal的原理 特点 ThreadLocal和Sychro ...

  5. PowerDotNet平台化软件架构设计与实现系列(13):应用监控平台

    本文再写一篇和具体业务逻辑几乎无关的公共服务应用监控平台.PowerDotNet自研的应用监控平台系统,是服务治理的重要拼图,和服务治理平台配合使用效果更好. 监控开源产品非常丰富,站在巨人的肩膀上, ...

  6. ASP.NET Web 应用 Docker踩坑历程

    听说Docker这玩意挺长时间了,新建Web应用的时候,也注意到有个启用Docker的选项. 前两天扫了一眼<[大话云原生]煮饺子与docker.kubernetes之间的关系>,觉得有点 ...

  7. 『现学现忘』Git基础 — 18、Git对象的总结

    目录 1.Git操作最基本的流程 2.工作目录中文件的状态 3.Git效率说明 提示:前面三篇文章已经分别的对blob对象.tree对象.commit对象进行了详细的说明,这篇文章我们总结一下,Git ...

  8. NFS学习笔记

    一.NFS原理 ## 本次实验以CentOS7.7为例 [root@qll251 ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 ( ...

  9. Next.js 在 Serverless 中从踩坑到破茧重生

    作者 杨苏博,偏后端的全栈开发,目前负责腾云扣钉的 Cloud Studio 产品.在团队中负责接技术架构设计与 Review.Cloud Studio 编辑器内核设计与开发.部分核心插件设计与开发: ...

  10. wcf使用JetEntityFrameworkProvider.dll写access数据库时,报"操作必须使用一个可更新的查询"错误的解决办法

    由于users用户组无权重写access数据库,需要设置users组用户能读写access数据库.