如何处理c ++ / STL中的大型数组?

时间:2015-07-19 16:30:17

标签: c++ algorithm stl

我正在尝试在spoj上解决此问题arraysub。我使用滑动窗口概念编码它,我使用max-heap来存储当前窗口的元素。问题约束是10 ^ 5的顺序,我的提交收到SIGABRT错误。我在wiki上看到,如果内存泄漏或初始化大型数组时出现此错误,则会出现此错误。我该如何处理? long long,long long int,long long unsigned int,似乎不起作用。请帮忙。以下是我的代码:

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
typedef pair<long, long> Pair;
long  *a = new long[1000001], *output = new long[1000001];
long n, k;

void slidingWindowMax()
{
    priority_queue<Pair> Q;
    for(int i=0;i<k; i++)
        Q.push(Pair(a[i], i));

    for(int i=k; i<n; i++)
    {
        Pair p = Q.top();
        output[i-k] = p.first;

        while(p.second <= i-k)
        {
            Q.pop();
            p = Q.top();
        }

        Q.push(Pair(a[i], i));
    }
    output[n-k] = Q.top().first;

    for(int i=0;i<(n-k+1);i++)
    {
        cout << output[i] << " ";
    }
}



int main()
{
    cin >> n;
    for(int i=0;i<n;i++)
        cin >> a[i];
    cin >> k;

    slidingWindowMax();
    return 0;
}

0 个答案:

没有答案