Problem p01227 (C++) — buggy submission, verdict: Runtime Error

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

using namespace std;

#define FOR(i, a, b) for (long long i = (a); i < (b); i++)
#define REP(i, N) for (long long i = 0; i < (N); i++)
#define ALL(s) (s).begin(), (s).end()
#define fi first
#define se second

#define PI acos(-1.0)
#define INF 10e9 + 9
#define EPS 1e-10
#define MAX_N 100100
#define MAX_M 100100

typedef long long ll;
typedef pair<ll, ll> P;
typedef pair<double, double> PD;
typedef pair<string, ll> PS;
typedef vector<ll> V;
typedef pair<P, char> PC;

// int t, n, k;
// int x[1000100];
//
// bool C(int d){
//	int co = 0;
//
//	REP(i, n){
//		if (co >= k)return false;
//		int pos = i;
//		while (x[pos] - x[i] <= d){
//			pos++;
//			if (pos == n)break;
//		}
//		i = pos - 1;
//		co++;
//	}
//
//	return true;
// }
//
// int main(){
//	cin >> t;
//	REP(o, t){
//		cin >> n >> k;
//		REP(i, n)cin >> x[i];
//
//		int lb = 0, ub = 1000000;
//		while (ub - lb > 0){
//			int mid = (ub + lb) / 2;
//			if (C(mid))ub = mid;
//			else lb = mid + 1;
//		}
//
//		vector<ll> v;
//		int pos = 0, co = 0;
//		REP(i, n){
//			if (x[i] - x[pos] > ub){
//				v.push_back(x[i - 1] - x[pos]);
//				pos = i;
//				co++;
//			}
//			if (i == n - 1){
//				v.push_back(x[i] - x[pos]);
//				co++;
//			}
//		}
//
//		sort(ALL(v));
//		REP(i, k - co){
//			if (!v.empty())v.pop_back();
//		}
//
//		ll ans = 0;
//		REP(i, v.size())ans += v[i];
//		cout << ans << endl;
//	}
// }

ll t, n, k;
ll x[1000100];

int main() {
  cin >> t;
  REP(i, t) {
    cin >> n >> k;
    REP(i, n) cin >> x[i];
    V v;
    FOR(i, 1, n) { v.push_back(x[i] - x[i - 1]); }
    sort(ALL(v));
    ll ans = 0;
    REP(i, n - k) ans += v[i];
    cout << ans << endl;
  }
}

Error: 0

Fixed submission:

#include <algorithm>
#include <cmath>
#include <complex>
#include <cstdio>
#include <fstream>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

using namespace std;

#define FOR(i, a, b) for (long long i = (a); i < (b); i++)
#define REP(i, N) for (long long i = 0; i < (N); i++)
#define ALL(s) (s).begin(), (s).end()
#define fi first
#define se second

#define PI acos(-1.0)
#define INF 10e9 + 9
#define EPS 1e-10
#define MAX_N 100100
#define MAX_M 100100

typedef long long ll;
typedef pair<ll, ll> P;
typedef pair<double, double> PD;
typedef pair<string, ll> PS;
typedef vector<ll> V;
typedef pair<P, char> PC;

int t, n, k;
int x[1000100];

bool C(int d) {
  int co = 0;

  REP(i, n) {
    if (co >= k)
      return false;
    int pos = i;
    while (x[pos] - x[i] <= d) {
      pos++;
      if (pos == n)
        break;
    }
    i = pos - 1;
    co++;
  }

  return true;
}

int main() {
  cin >> t;
  REP(o, t) {
    cin >> n >> k;
    REP(i, n) cin >> x[i];

    int lb = 0, ub = 1000000;
    while (ub - lb > 0) {
      int mid = (ub + lb) / 2;
      if (C(mid))
        ub = mid;
      else
        lb = mid + 1;
    }

    vector<ll> v;
    int pos = 0, co = 0;
    REP(i, n) {
      if (x[i] - x[pos] > ub) {
        v.push_back(x[i - 1] - x[pos]);
        pos = i;
        co++;
      }
      if (i == n - 1) {
        v.push_back(x[i] - x[pos]);
        co++;
      }
    }

    sort(ALL(v));
    REP(i, k - co) v.pop_back();

    ll ans = 0;
    REP(i, v.size()) ans += v[i];
    cout << ans << endl;
  }
}