@[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