Problem p03137 (C++)

Buggy submission (status: Runtime Error):
#include <bits/stdc++.h>

using namespace std;

#define REP1(i, n) for (int i = 1, i##_len = (n); i < i##_len; ++i)
#define REP(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)
#define pow(x) x *x
#define ll long long
static const ll MAX = 1000000;
static const ll INFTY = 1e12;
static const ll MOD = 1000000007;

template <typename T> inline string toString(const T &a) {
  ostringstream oss;
  oss << a;
  return oss.str();
};

struct edge {
  ll to, cost;
};

using Graph = vector<vector<int>>;
using _Graph = vector<vector<edge>>;

const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};

// 深さ優先探索
vector<bool> seen;
vector<int> colors;

int H, W, N;
int sx, sy, gx, gy;
vector<vector<char>> field;
vector<vector<int>> dist;
// vector<pair<int, int>> gx, gy;
deque<pair<int, int>> que;

typedef vector<vector<int>> Matrix;

const int INF = 100000000;

int main() {

  ll N, M;
  cin >> N >> M;
  vector<ll> X(M);
  REP(i, M) { cin >> X[i]; }
  sort(X.begin(), X.end());

  vector<ll> diff(M - 1);
  ll ans = 0;
  REP(i, M - 1) {
    diff[i] = X[i + 1] - X[i];
    ans += X[i + 1] - X[i];
  }

  sort(diff.begin(), diff.end(), greater<ll>());

  REP(i, N - 1) { ans -= diff[i]; }

  cout << ans << endl;
}
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         pass System Test!
*/


Fixed submission:
#include <bits/stdc++.h>

using namespace std;

#define REP1(i, n) for (int i = 1, i##_len = (n); i < i##_len; ++i)
#define REP(i, n) for (int i = 0, i##_len = (n); i < i##_len; ++i)
#define pow(x) x *x
#define ll long long
static const ll MAX = 1000000;
static const ll INFTY = 1e12;
static const ll MOD = 1000000007;

template <typename T> inline string toString(const T &a) {
  ostringstream oss;
  oss << a;
  return oss.str();
};

struct edge {
  ll to, cost;
};

using Graph = vector<vector<int>>;
using _Graph = vector<vector<edge>>;

const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};

// 深さ優先探索
vector<bool> seen;
vector<int> colors;

int H, W, N;
int sx, sy, gx, gy;
vector<vector<char>> field;
vector<vector<int>> dist;
// vector<pair<int, int>> gx, gy;
deque<pair<int, int>> que;

typedef vector<vector<int>> Matrix;

const int INF = 100000000;

int main() {

  ll N, M;
  cin >> N >> M;
  vector<ll> X(M);
  REP(i, M) { cin >> X[i]; }
  sort(X.begin(), X.end());

  vector<ll> diff(M - 1);
  ll ans = 0;
  REP(i, M - 1) {
    diff[i] = X[i + 1] - X[i];
    ans += X[i + 1] - X[i];
  }

  sort(diff.begin(), diff.end(), greater<ll>());

  long long res = X.back() - X[0];
  for (int i = 0; i < min((ll)diff.size(), N - 1); ++i)
    res -= diff[i];
  cout << res << endl;
}
/*
                   _ooOoo_
                  o8888888o
                  88" . "88
                  (| -_- |)
                  O\  =  /O
               ____/`---'\____
             .'  \\|     |//  `.
            /  \\|||  :  |||//  \
           /  _||||| -:- |||||-  \
           |   | \\\  -  /// |   |
           | \_|  ''\---/''  |   |
           \  .-\__  `-`  ___/-. /
         ___`. .'  /--.--\  `. . __
      ."" '<  `.___\_<|>_/___.'  >'"".
     | | :  `- \`.;`\ _ /`;.`/ - ` : | |
     \  \ `-.   \_ __\ /__ _/   .-` /  /
======`-.____`-.___\_____/___.-`____.-'======
                   `=---='
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
         pass System Test!
*/