运行 这个 hackerrank Gridland metro 的解决方案时我遇到了分段错误

I am getting segmentation fault while running this hackerrank Gridland metro's solution

#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;


int main() {
    //start of input
    long n,m,k;
    cin>>n>>m>>k;
    bool a[n][m];
    for(long i=0;i<n;i++){
        for(long j=0;j<m;j++){
            a[i][j] = true;
        }
    }
    long b[k][3];
    for(long i=0;i<3;i++){
        for(long j=0;j<k;j++){
            cin>>b[i][j];
        }
    }
    //start of main logic
    for(long i=0;i<k;i++){     
        long row = b[i][0]-1;
        long col_init = b[i][1]-1;
        long col_fin = b[i][2]-1;
        while(col_init<=col_fin){
            a[row][col_init]=false;
            col_init++;
        }
    }
    long count=0;
    //counting number of empty area
    for(long i=0;i<n;i++){
        for(long j=0;j<m;j++){
        if(a[i][j]==true){count++;}
        }
    }
    cout<<count;
    return 0;
}

限制条件:
1 <= n,m <= 109
1 <= k <= 1000

所以在上面的代码中:

在某些情况下,我在上述代码中遇到分段错误。
它 运行 适合小输入,但大输入有问题。

问题表明 1 <= n,m <= 109

所以制作一个像[n][m]这样的数组会占用太多内存,这就是为什么你会得到分段错误,想一个不同的方法来解决它...

如果您不想要任何有关如何解决问题的提示,请立即停止阅读

HINT : k的值小于1000,将所有火车轨道保存在一个向量数组中,不会超出内存,然后尝试添加可用位置数要通过这些 'k' 轨道一条一条地安装灯柱,想一想如何做到这一点。