洛谷P1803线段覆盖_代码求纠错

img

我觉得我的代码没啥问题了,但是提交过后还是有两个TLE,求纠错

#include <stdio.h>
int main()
{
int n;
int a[1000001][2]; //a[i][0]是头,a[i][1]是尾
scanf("%d", &n);

int i,j,t;
for (i = 1; i <= n; i++)
{
    scanf("%d%d", &a[i][0], &a[i][1]);
}

for (i = 1; i < n; i++)                 //a按尾排序
{
    for (j = 1; j <= n - i; j++)
    {
        if (a[j][1] > a[j + 1][1])
        {
            t = a[j][1];
            a[j][1] = a[j + 1][1];
            a[j + 1][1] = t;

            t = a[j][0];
            a[j][0] = a[j + 1][0];
            a[j + 1][0] = t;
        }
    }
}


int count = 1;                      //第一场必须参加
int y = a[1][1];                    //y记录最新一次参加比赛的 尾

for (i = 2; i <= n; i++)
{
    if (a[i][1] > y && a[i][0] >= y)
    {
        count++;
        y = a[i][1];
    }
}


printf("%d",count);

return 0;

}

修改处见注释,供参考:

#include <stdio.h>
int a[1000001][2]; //a[i][0]是头,a[i][1]是尾   修改
int main()
{
    int n;
    scanf("%d", &n);
    int i, j, t;
    for (i = 0; i < n; i++)  //修改
    {
        scanf("%d%d", &a[i][0], &a[i][1]);
    }
    for (i = 0; i < n - 1; i++) //a按尾排序    修改
    {
        for (j = 0; j < n - i - 1; j++)      //修改
        {
            if (a[j][1] > a[j + 1][1])
            {
                t = a[j][1];
                a[j][1] = a[j + 1][1];
                a[j + 1][1] = t;

                t = a[j][0];
                a[j][0] = a[j + 1][0];
                a[j + 1][0] = t;
            }
        }
    }
    int count = 1;                      //第一场必须参加
    int y = a[0][1];   //修改           //y记录最新一次参加比赛的 尾
    for (i = 1; i < n; i++)
    {
        if (a[i][0] >= y) //if (a[i][1] > y && a[i][0] >= y)  修改
        {
            count++;
            y = a[i][1];
        }
    }
    printf("%d", count);
    return 0;
}