递增三元组一直有两个运行超时,应该怎么优化呀,只会c还不会c++

题目链接:
https://www.lanqiao.cn/problems/172/learning/?first_category_id=1&sort=students_count&second_category_id=3

#include <stdio.h>
#include <stdlib.h>

int main()
{
  int n;
 long long a[100000],b[100000],c[100000];
  int i,j,k,l=0;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
    scanf("%lld",&a[i]);
  }
  for(i=0;i<n;i++)
  {
    scanf("%lld",&b[i]);
  }
  for(i=0;i<n;i++)
  {
    scanf("%lld",&c[i]);
  }
  for(i=0;i<n;i++)
  {
    for(j=0;j<n;j++)
    {
      if(a[i]<b[j])
      {
        for(k=0;k<n;k++)
        {
          if(b[j]<c[k])
          {
            l++;
          }
        }
      }
    }
  }
  printf("%d",l);
  return 0;

}

#include <stdio.h>
#include <stdlib.h>

int compare(const void* a, const void* b)
{
    return *(long long*)a - *(long long*)b;
}

int main()
{
    int n;
    long long a[100000], b[100000], c[100000];
    int i, j, k;
    int l = 0;

    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%lld", &a[i]);
    }
    for (i = 0; i < n; i++) {
        scanf("%lld", &b[i]);
    }
    for (i = 0; i < n; i++) {
        scanf("%lld", &c[i]);
    }

    // 数组升序排序
    qsort(a, n, sizeof(long long), compare);
    qsort(b, n, sizeof(long long), compare);
    qsort(c, n, sizeof(long long), compare);

    // 双指针扫描
    j = 0;
    k = 0;
    for (i = 0; i < n; i++) {
        while (j < n && b[j] <= a[i]) {
            j++;
        }
        if (j == n) {
            break;
        }
        while (k < n && c[k] <= b[j]) {
            k++;
        }
        if (k == n) {
            break;
        }
        l += (n - k);
    }

    printf("%d", l);

    return 0;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^