70分,被卡常?
查看原帖
70分,被卡常?
365973
虚无Void楼主2021/9/6 21:11

sort太慢了吗?

#include <bits/stdc++.h>
using namespace std;
int a[100005], n = 0, nowh, maxn = -1, minn = -1;
struct seq
{
    int h, len1 = 1, len2 = 1;
} s[100005];
bool cmp(seq a, seq b)
{
    if (a.h >= nowh && b.h >= nowh)
    {
        return a.len1 > b.len1;
    }
    else if (a.h < nowh)
        return 0;
    else
        return 1;
}
bool cmp2(seq a, seq b)
{
    if (a.h < nowh && b.h < nowh)
    {
        return a.len2 > b.len2;
    }
    else if (a.h >= nowh)
        return 0;
    else
        return 1;
}

int main()
{
    while (~scanf("%d", &s[++n].h))
    {
        a[n] = s[n].h;
    }
    n--;
    for (int i = 2; i <= n; i++)
    {
        nowh = a[i];
        sort(s + 1, s + i, cmp);
        if (s[1].h >= a[i])
        {
            s[i].len1 += s[1].len1;
            // printf("%d %d\n", i, s[1].len1);
        }
        sort(s + 1, s + i, cmp2);
        if (s[1].h < a[i])
        {
            s[i].len2 += s[1].len2;
        }

        maxn = max(maxn, s[i].len1);
        minn = max(minn, s[i].len2);
    }
    printf("%d\n%d\n", maxn, minn);
    return 0;
}
2021/9/6 21:11
加载中...