30分求助
  • 板块P1105 平台
  • 楼主zhibuba
  • 当前回复1
  • 已保存回复1
  • 发布时间2020/6/17 03:58
  • 上次更新2023/11/7 00:30:48
查看原帖
30分求助
319478
zhibuba楼主2020/6/17 03:58
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct platform{
    int H, L, R, index;
} A[1001] = {{-1, -1, 20001, 0}}, B[1001];

int comp(const void * _a, const void *_b)
{
    const struct platform * a = _a, * b = _b;
    if (a->H != b->H)
        return a->H - b->H;
    else
        return a->index - b->index;
}

int main(void)
{
    int N;
    scanf("%d", &N);
    for (int i = 1; i <= N; i++)
    {
        scanf("%d%d%d", &A[i].H, &A[i].L, &A[i].R);
        A[i].index = i;
    }
    memcpy(B, A, sizeof(A));
    qsort(A, N + 1, sizeof(struct platform), comp);
    for (int i = 1; i <= N; i++)
    {
        struct platform * p = bsearch(&B[i], A, N + 1, sizeof(struct platform), comp);
        int left = -1, right = -1;
        while (--p >= A && (left < 0 || right < 0))
        {
            if (p->L < B[i].L && p->R > B[i].L && left < 0)
            {
                left = p->index;
            }
            if (p->R > B[i].R && p->L < B[i].R && right < 0)
            {
                right = p->index;
            }
        }
        printf("%d %d\n", left, right);
    }
}
2020/6/17 03:58
加载中...