求助四个超时

P1918 保龄球

@[shiTXYY](/user/926141) `MLE` 是 `Memory Limit Exceeded` 的缩写,意为内存超限(而非超时),是程序使用空间过大导致的报错。此题中由于数据范围过大不能用桶存储,需要对数组排序后使用二分查找。
by yuanxiuan @ 2023-08-12 15:15:49


@[yuanxiuan](/user/614716) ``` ``` #include <stdio.h> #include <stdlib.h> #include <math.h> #include <stdbool.h> #include <string.h> #include <stdlib.h> struct asd{ int w; int math; }a[10005]; int main() { int n; int j,c,k,i,d; int r,l,mid; scanf("%d",&n); for(i=1;i<=n;i++) { scanf("%d",&c); a[i].math=c; a[i].w=i; } for(i=1;i<=n;i++) { for(j=i+1,k=i;j<=n;j++) { if(a[j].math<a[k].math) k=j; } c=a[k].math,a[k].math=a[i].math,a[i].math=c; d=a[k].w,a[k].w=a[i].w,a[i].w=d; } scanf("%d",&k); for(j=1;j<=k;j++) { scanf("%d",&c); r=n+1; l=0; while(l+1<r) { mid=(l+r)/2; if(a[mid].math<c) l=mid; else r=mid; } if(a[r].math!=c) printf("0\n"); else printf("%d\n",a[r].w); } return 0; } ``` 现在这个代码是超时了··
by shiTXYY @ 2023-08-12 15:42:34


@[shiTXYY](/user/926141) 需要 $O(n\log n)$ 复杂度的排序,比如快速排序
by yuanxiuan @ 2023-08-12 15:46:49


|