Problem p02618 (C++)

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

// #define int long long
typedef long long ll;
const int INF = 2e9;
// const ll INF = 9e18;

signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int D;
  cin >> D;
  vector<int> c(26);
  for (int i = 0; i < 26; i++)
    cin >> c[i];
  vector<vector<int>> s(D, vector<int>(26));
  for (int i = 0; i < D; i++) {
    for (int j = 0; j < 26; j++) {
      cin >> s[i][j];
    }
  }
  vector<int> t(D);
  // 初期t[i]の決定
  for (int i = 0; i < D; i++) {
    t[i] = i % 26;
  }

  ll oldsum = -INF;
  for (int m = 0; m < 100000; m++) {
    // ここでt[i]を更新していく
    int process = rand() % 2;
    if (process == 0) {
      int dd = rand() % D;
      int qq = rand() % 26;
      int oldval = t[dd];
      t[dd] = qq;
      ll sum = 0;
      vector<int> last(26);
      for (ll i = 0; i < D; i++) {
        sum += s[i][t[i]];
        last[t[i]] = i + 1;
        for (int j = 0; j < 26; j++) {
          sum -= c[j] * (i + 1 - last[j]);
        }
      }
      if (sum > oldsum) {
        oldsum = sum;
      } else {
        t[dd] = oldval;
      }
    } else {
      int dd1 = rand() % D;
      int dd2 = dd1 + rand() % (D - dd1 - 1);
      int qq1 = t[dd1];
      int qq2 = t[dd2];
      t[dd1] = qq2;
      t[dd2] = qq1;
      ll sum = 0;
      vector<int> last(26);
      for (ll i = 0; i < D; i++) {
        sum += s[i][t[i]];
        last[t[i]] = i + 1;
        for (int j = 0; j < 26; j++) {
          sum -= c[j] * (i + 1 - last[j]);
        }
      }
      if (sum > oldsum) {
        oldsum = sum;
      } else {
        t[dd1] = qq1;
        t[dd2] = qq2;
      }
    }
    //=======================
  }
  for (int i = 0; i < D; i++) {
    cout << t[i] + 1 << "\n";
  }
}

Fixed submission:
#include <bits/stdc++.h>
using namespace std;

// #define int long long
typedef long long ll;
const int INF = 2e9;
// const ll INF = 9e18;

signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int D;
  cin >> D;
  vector<int> c(26);
  for (int i = 0; i < 26; i++)
    cin >> c[i];
  vector<vector<int>> s(D, vector<int>(26));
  for (int i = 0; i < D; i++) {
    for (int j = 0; j < 26; j++) {
      cin >> s[i][j];
    }
  }
  vector<int> t(D);
  // 初期t[i]の決定
  for (int i = 0; i < D; i++) {
    t[i] = i % 26;
  }

  ll oldsum = -INF;
  for (int m = 0; m < 100000; m++) {
    // ここでt[i]を更新していく
    int process = rand() % 2;
    if (process == 0) {
      int dd = rand() % D;
      int qq = rand() % 26;
      int oldval = t[dd];
      t[dd] = qq;
      ll sum = 0;
      vector<int> last(26);
      for (ll i = 0; i < D; i++) {
        sum += s[i][t[i]];
        last[t[i]] = i + 1;
        for (int j = 0; j < 26; j++) {
          sum -= c[j] * (i + 1 - last[j]);
        }
      }
      if (sum > oldsum) {
        oldsum = sum;
      } else {
        t[dd] = oldval;
      }
    } else {
      int dd1 = rand() % (D - 1);
      int dd2 = dd1 + 1 + rand() % (D - dd1 - 1);
      int qq1 = t[dd1];
      int qq2 = t[dd2];
      t[dd1] = qq2;
      t[dd2] = qq1;
      ll sum = 0;
      vector<int> last(26);
      for (ll i = 0; i < D; i++) {
        sum += s[i][t[i]];
        last[t[i]] = i + 1;
        for (int j = 0; j < 26; j++) {
          sum -= c[j] * (i + 1 - last[j]);
        }
      }
      if (sum > oldsum) {
        oldsum = sum;
      } else {
        t[dd1] = qq1;
        t[dd2] = qq2;
      }
    }
    //=======================
  }
  for (int i = 0; i < D; i++) {
    cout << t[i] + 1 << "\n";
  }
}