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. 『现学现忘』Git基础 — 7、设置Git Bash终端默认路径

    目录 1.Git Bash默认路径 2.如何查看Git Bash终端默认路径 3.如何修改Git Bash终端的默认路径 4.拓展:指定目录进入Git Bash终端 5.注意事项 如果您不熟悉Git命 ...

  2. PyTorch 广播机制

    PyTorch 广播机制 定义 PyTorch的tensor参数可以自动扩展其大小.一般的是小一点的会变大,来满足运算需求. 规则 满足一下情况的tensor是可以广播的. 至少有一个维度 两个ten ...

  3. 【笔记】排查CPU占用过高

    本文是该教程视频的笔记 https://www.bilibili.com/video/BV15T4y1y7eH 1. 问题演示 将演示项目打包放到服务器运行 执行 curl http://localh ...

  4. 流量录制回放工具jvm-sandbox-repeater入门篇——录制和回放

    在上一篇文章中,把repeater服务部署介绍清楚了,详细可见:流量录制回放工具jvm-sandbox-repeater入门篇--服务部署 今天在基于上篇内容基础上,再来分享下流量录制和回放的相关内容 ...

  5. H5如何实现唤起APP

    前言 写过hybrid的同学,想必都会遇到这样的需求,如果用户安装了自己的APP,就打开APP或跳转到APP内某个页面,如果没安装则引导用户到对应页面或应用商店下载.这里就涉及到了H5与Native之 ...

  6. 用crash tool观察ARM64 Linux地址转换

    初学者学习Linux系统地址转换时,如果只是学习理论,又或者研读代码,那可能感觉比较枯燥.此时如果可以利用某些工具实际观察一下地址转换的过程,那可能会给枯燥的内核学习带来些微的乐趣.crash too ...

  7. zabbix脚本获取web status code,异常告警

    python代码,需要安装requests库 1 #!/usr/bin/env python 2 #-*-coding:utf-8-*- 3 import requests,os,sys 4 url ...

  8. 网络协议之:sctp流控制传输协议

    目录 简介 TCP有什么不好 sctp的特点 总结 简介 要讲网络协议,肯定离不开OSI(Open System Interconnection)的七层模型. 我们一般关注的是网络层之上的几层,比如I ...

  9. 49. Group Anagrams - LeetCode

    Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List&l ...

  10. 在Vmware虚拟机(win10)中安装逍遥安卓模拟器遇到的问题及解决办法

    0x00 下载正确的安装包 逍遥模拟器官网:逍遥安卓模拟器下载官网 (xyaz.cn) 为什么要强调下载正确的安装包? 因为我在第一次下载的时候就下错了,下的是 逍遥模拟器 - 电脑玩手游神器 (me ...