最后一个点tle了,帮忙看看还能怎么减少时间
查看原帖
最后一个点tle了,帮忙看看还能怎么减少时间
810072
Yemuua楼主2023/11/28 22:17
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <stdlib.h>
int* a;
int* b;
int n;
int qs(int start, int end, int t) {
    int l = start, r = end;
    while (l <= r) {
        int mid = l + (r - l) / 2;
        if (a[mid] < t) {
            l = mid + 1;
        }
        else if (a[mid] > t) {
            r = mid - 1;
        }
        else {
            while (a[mid - 1] == t && mid >= 1) {
                mid--;
            }
            return mid;
        }
    }
    if (l > r) {
        return -1;
    }
}
int main(){
    int m;
    scanf_s("%d%d", &n, &m);
    a = (int*)malloc(n * sizeof(int));
    b = (int*)malloc(m * sizeof(int));
    for (int i = 0; i < n; i++) {
        scanf_s("%d", a + i);
    }
    for (int i = 0; i < m; i++) {
        scanf_s("%d", b + i);
        int x = qs(0, n - 1, b[i]);
        if (x == -1) {
            printf("%d ", -1);
        }
        else {
            printf("%d ", x + 1);
        }
    }
    free(a);
    free(b);
    return 0;
}
是搜索部分还要再改吗?
2023/11/28 22:17
加载中...