40分求助
  • 板块P1105 平台
  • 楼主yibigouxiao
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/10/27 15:33
  • 上次更新2023/10/27 05:37:24
查看原帖
40分求助
805161
yibigouxiao楼主2022/10/27 15:33
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int n, m = 1;
struct node
{
	int l;
	int r;
	int h;
	int num;
}ass[10001];
int findleft(int a)
{
	bool flag = false;
	for (int i =a+1; i <= n; i++)
	{
		if (ass[a].l > ass[i].l && ass[a].l < ass[i].r)
		{
			ass[a].l=ass[i].num; flag = true; break;
		}
	}
	if (flag == false)ass[a].l=0;
	return ass[a].l;
}
int findright(int b)
{
	bool biao = false;
	for (int j = b + 1; j <= n; j++)
	{
		if(ass[b].r>ass[j].l&&ass[b].r<ass[j].r)
		{
			ass[b].r=ass[j].num; biao = true; break;
		}
	}
	if (biao == false)ass[b].r = 0;
	return ass[b].r;
}
bool cmp1(node a,node b)
{
	if (a.h == b.h) return a.num < b.num;
	return a.h > b.h;
}
bool cmp2(node a, node b)
{
	return a.num < b.num;
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cin >> ass[i].h >> ass[i].l >> ass[i].r;
		ass[i].num = i;
	}
	sort(ass + 1, ass + n + 1, cmp1);
	for (int i = 1; i <= n; i++)
	{
		ass[i].l = findleft(i);
		ass[i].r = findright(i);
	}
	sort(ass + 1,ass + n + 1, cmp2);
	for (int i = 1; i < n; i++)
	{
		cout << ass[i].l << " " << ass[i].r << endl;
	}
	cout << "0" << " " << "0" << endl;
	return 0;
}
2022/10/27 15:33
加载中...