用C ++存储非常大的数组?

时间:2018-03-30 07:47:21

标签: c++ arrays vector

所以我正在HackerEarth处理一个问题,它要求我存储一个大小为10 ^ 9的整数数组。 我试图使用向量存储数组,但当我尝试提交我的解决方案时,我得到运行时错误SIGABRT。 这是我的代码:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    unsigned int h, c, q;
    cin >> h >> c >> q;
    vector<unsigned int> minht(h + 1);
    for (unsigned int i = 0; i <= h; i++)
        minht[i] = 0;
    unsigned int hc, st, et;
    for (unsigned int i = 1; i <= c; i++)
    {
        cin >> hc >> st >> et;
        for (unsigned int j = 1; j <= h; j++)
        {
            if (j >= st && j <= et)
            {
                if (hc > minht[j])
                    minht[j] = hc;
            }
        }
    }
    unsigned int hq, tq;
    for (unsigned int i = 1; i <= q; i++)
    {
        cin >> hq >> tq;
        if (hq > minht[tq])
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
}

h的值不是很大(10 ^ 9)时代码工作正常但是当h的值非常大时我得到SIGABRT。

任何建议?

编辑: 所以我尝试重写我的整个代码,我的新代码如下所示:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    unsigned int h,c,q,mh=0;
    cin>>h>>c>>q;
    vector<unsigned int> hc(c+1);
    vector<unsigned int> st(c+1);
    vector<unsigned int> et(c+1);
    for(unsigned int i=1;i<=c;i++)
    {
        cin>>hc[i]>>st[i]>>et[i];
        if(mh<hc[i])mh=hc[i];
    }
    unsigned int ht,ti;
    for(unsigned int i=1;i<=q;i++)
    {
        int flag=0;int ct=0;
        cin>>ht>>ti;
        if(ht<=mh)
        {
            for(unsigned int j=1;j<=c;j++)
            {
                if(ti>=st[j] && ti<=et[j])
                {
                    if(ht<=hc[j])
                    {
                        ct=1;break;
                    }
                }
            }
        }
        if(ct==0)cout<<"YES\n";
        else cout<<"NO\n";

    }

}

现在接受了解决方案。 我所做的是重新设计算法,以便不必存储1个非常大的4 GB数组,我必须存储3个LARGE数组,每个最大40 MB。

所以问题现在已经解决,但我仍然不认为这个问题与内存问题有关。

因为当我尝试创建大小为int的{​​{1}}向量时,为了测试在线编译器,我得到了一个特定的10E8错误。但当我将尺寸更改为Memory Limit Exceeded时,我再次获得了10E9。因此,尽管存在内存问题,但SIGABRT是由声明SIGABRT大小的数组引起的。

任何想法可能导致这个?

另外,我首先在自己的编译器上创建程序,然后在线提交。我无法在我的设置上调试程序,因为程序要求我在遇到错误之前输入10E9数据值,所以我认为在HackerEarth上这样做会更容易。

0 个答案:

没有答案