为什么开这么小B桶还MLE

P2249 【深基13.例1】查找

DemonPlayer @ 2024-05-01 08:46:41

#include<bits/stdc++.h>
using namespace std;

int n,m,t,B[100000001];

int main(){
    memset(B,-1,sizeof(B));
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%d",&t);
        B[t]++;
    }
    for(int i=0;i<m;i++){
        scanf("%d",&t);
        cout<<B[t]<<' ';
    }
    return 0;
}

by yscxk264 @ 2024-05-01 08:57:08

@DemonPlayer 最好不要开上亿的数组 100000001*4/1024/1024=381MB,超过了256MB


by fuyi_fox @ 2024-05-01 08:59:28

1亿的数组一点都不小。还有这道题的思路应该是用二分查找而不是直接统计每个数字出现次数然后直接输出。数字范围太大了,数组肯定开不下。


by CarrotMeow @ 2024-05-01 09:00:10

不如 map。


by DemonPlayer @ 2024-05-01 09:04:11

@fuyi_fox 我以前都开编译器极限大小。。。


by DemonPlayer @ 2024-05-01 09:06:41

@fuyi_fox 上课讲二分的时候我去上厕所了。。。全班就我不会。。。


by fuyi_fox @ 2024-05-01 09:24:17

实在不会可以用 lower_bound 函数。具体格式可以网上搜一下。


|