1472 E. Correct Placement

news/2024/11/26 11:51:47/

https://codeforces.com/contest/1472/problem/E

题意:有好多个矩形,已知它们的长a和宽b和出现顺序。对于每个矩形A,寻找任意一个矩形B,使得A能放在B上且不盖住B(即Aa<Ba&&Ab<Bb||Aa<Bb&&Ab<Ba),找不到就输出-1。

首先要注意时找到任意一个矩形即可。我们先定义a为较大值,b为较小值,这样就只需要判断A的b<B的b。然后我们以a为升序排列数组,这样就能保证对于每个矩形i,i-1的a<=i的a。

之后就是关键。上述的操作使我们不用考虑a的大小,所以只需要不断更新一个min为出现过的i中最小的b,来判断i的b是否大于min,满足就选择min所指的i,不满足就输出-1,然后更新min为i的b。
但是这样会带来个问题,例如 1 3 ,2 3, 2 4 ,2 5,我们会在i=2时更新min为3,这样会使i=3,i=4的时候找不到答案,输出-1。
怎么解决嘞?我们让a相同的时候b为降序排序就行。这样就是1 3,2 5,2 4,2 3,此时就不会产生上述问题辣。
(这里要注意我们对数组排序后元素的原来出现顺序就被打乱了,所以在更新了每个元素对应的答案之后要重新排序回来)

#include <bits/stdc++.h>
using namespace std;
#define qc std::ios::sync_with_stdio(0);struct bag {long long a;long long b;int num;int ans;
};
struct bag a[200001];bool cmp(bag a, bag b) {if (a.a == b.a)return a.b > b.b; //防止1 3, 2 3, 2 4,第三个元素找不到答案的情况elsereturn a.a < b.a;
}bool cmp2(bag a, bag b) {return  a.num <  b.num;
}int main() {qc;cin.tie(0);int t;cin >> t;while (t--) {int n;cin >> n;for (int i = 0; i < n; i++) {cin >> a[i].a >> a[i].b ;//定义a为较大值,b为较小值long long maxa = max(a[i].a, a[i].b);long long minb = min(a[i].a, a[i].b);a[i].a = maxa;a[i].b = minb;//初始化每个元素的答案为-1a[i].ans = -1;//给元素按顺序编号a[i].num = i + 1;}sort(a, a + n, cmp);//a升序排列int miner = 0;for (int i = 1; i < n; i++) {if (a[i].b > a[miner].b) {a[i].ans = a[miner].num;}if (a[i].b < a[miner].b) {miner = i; //更新miner}}sort(a, a + n, cmp2); //恢复原来的排列for (int i = 0; i < n; i++) {cout << a[i].ans << " ";}cout << endl;}
}

http://www.ppmy.cn/news/504940.html

相关文章

HHUOJ 1726 a+b

HHUOJ 1726 ab 题目描述 实现一个加法器&#xff0c;使其能够输出ab的值。 输入 输入包括两个数a和b&#xff0c;其中a和b的位数不超过1000位。 输出 可能有多组测试数据&#xff0c;对于每组数据&#xff0c; 输出ab的值。 样例输入 6 8 2000000000 30000000000000000…

非门芯片 74AHC1G08 74AHC1G04 74AHC1G02的区别

最近做电路&#xff0c;有一个非门芯片出了“问题”&#xff0c;导致电路板不能正常工作。 我设计的时候用的是 74AHC1G04&#xff0c;买芯片的时候没有注意&#xff0c;买成了1G08。 外观是相同的。都是这种5脚封装 封装是这样的 但是他们的内部逻辑不一样。 1G08是这样的引…

if (ch != 0 ch != 224)

如果 ch 不等于 0&#xff0c;那么执行下面的代码。 如果希望我给你更多的信息&#xff0c;可以告诉我你想要知道什么。

1432:ax+b=c

1432:axbc 描述 已知整数a、b、c的值&#xff0c;对于方程axbc&#xff0c;如果不存在整数解&#xff0c;则输出None&#xff1b;如果存在不止一个整数解&#xff0c;则输出其中最小的正整数解&#xff1b;如果存在唯一的整数解&#xff0c;则输出该解。 输入 多组案例。一个…

ABC161 E - Yutori

ABC161 E - Yutori 题意 给你一个长度为n的字符串s&#xff08;仅由’x’和’o’组成&#xff09;&#xff0c;要求你选出k个’o’且满足两个’o’中间相隔至少c个字符。 输出无论怎么选一定要选的位置。 思路 贪心 正序遍历贪心求最小位置记录在数组a中&#xff0c;倒序遍…

74HC/LS/HCT/F系列芯片的区别

1、 LS是低功耗肖特基&#xff0c;HC是高速COMS。LS的速度比HC略快。HCT输入输出与LS兼容&#xff0c;但是功耗低&#xff1b;F是高速肖特基电路&#xff1b; 2、 LS是TTL电平&#xff0c;HC是COMS电平。 3、 LS输入开路为高电平&#xff0c;HC输入不允许开路&#xff0c; hc 一…

华大HC32F460 HASH实验

HASH熟悉的人可直接叫哈希算法又称散列算法&#xff0c;这种算法是不可逆破解的&#xff0c;设计思想来源于MD4&#xff0c;将任意长度的数据压缩映射成固定长度的数据&#xff0c;此数据概率极低被其他数据所碰撞&#xff0c;HC32F460中的HASH算法仅支持HASH256&#xff0c;算…

CH577F-BLE Notihy

一、前言 最近玩了一下CH577的蓝牙&#xff0c;这里记录一下 二、准备 使用CH的EVT&#xff0c;从机用 BLE\Peripheral &#xff0c;主机用 BLE\Central&#xff0c;注意使用官网最新的&#xff0c;因为一直有进行更新&#xff0c;我前段时间拿的&#xff0c;使能notify是没…