Problem p01754 (C++) — buggy submission, verdict: Time Limit Exceeded

// i??\\??????i *
// P??????????????????????????????????????´????????????????°????????????????????§£?????????????????????????????????????????£??¨??????????????§????????????????§£?????????
#include <algorithm>
#include <iostream>
#define int long long
using namespace std;

int n, p, q;
int c[500000];
int rc[500001];

signed main() {
  int i;

  cin >> n >> p >> q;
  for (i = 0; i < n; i++) {
    cin >> c[i];
    c[i] += i * p;
  }

  sort(c, c + n);
  for (i = 1; i <= n; i++) {
    rc[i] = rc[i - 1] + c[i - 1];
  }

  int ans = -1e+18;
  for (i = 0; i <= n; i++) {
    int jisui = i * p * q + 2 * p * i * (i - 1) / 2;
    int syoku = rc[n] - rc[i];
    ans = max(ans, jisui + syoku);
  }
  ans -= p * n * (n - 1) / 2;
  cout << ans << endl;
  return 0;
}

Error: TLE

Fixed submission:

//???????????§?????????
//???[??\\???,???????????°]???????????????????§??????????????????§DP???????????\\??????????????????TLE?????????
//???K??\\?????????????????????????¶???????????¨???????????????????????????°????????£????????????????????¨?????????
//???????£??????????????????????????????????????????????????????????????????¨?????????
//
//???k??\\???????????????x?????¶?????§??????/????£?????????????????????????????????\\????????¨??????????????????????????´??????????????????
//???????????\\??°???????¨????n??\\??¨??????????????????????????°???jisuiDay??¨??????
//?????????????????´??????????????¨????????¨???????£?????????´?????????
//????????????????????????2P * jisuiDay?????????????£?????????????Ck -
//x?¢??????????
//???????????\\?????????????????????????????±?????????
//???2P * jisuiDay < Ck - x ??? ????£????????????????????????????
//
//??¢n?????¨??¢?´¢??????????????????k???????????????????????§???O(N^2)??¨??????
//??£??????????????\\???0????????????????????¨0???????????????????????¨????§????????????§??????????????????????????????????????????
//???????§??????????ver??§??????????????????????????£?????´???????????£??¨???????????????????????£????????????
//??\\???TLE?????????

//????£??????§??????(????????????????????????????????????????????????)
//????£???????????????????????????????????????? *
//P????????????????????¨???????????????
#include <iostream>
using namespace std;

long long N, P, Q;
long long C[500001]; // 1-indexed

int main() {
  int n, k;
  cin >> N >> P >> Q;
  for (int i = 1; i <= N; i++)
    cin >> C[i];

  long long ans = -1e+15; //????¶????????????§???

  for (n = 0; n <= N; n++) {  //?????????????????°????±???????
    long long happy = 0;      //????¶????
    long long jisuiP = P * Q; //???????????????
    int jisuiDay = n;         //??????????????\\??°

    // cout << "????????\\??° =" << n << endl;
    for (k = 1; k <= N; k++) { // k??\\???????£?????´????????????????
      // cout << k << "??\\??? = ";
      long long botti =
          2 * P * jisuiDay; //????£?????????´????????????????????????????°????
      long long turai =
          C[k] - jisuiP; //????£?????????´??????????£??????????????¢???????
      if (botti < turai) {
        // cout << "????£?" << endl;
        happy += C[k]; //????£???????
        jisuiP -= P;   //????£??????????????????????????????????
      } else {
        // cout << "??????" << endl;
        happy += jisuiP; //????????????
        jisuiP += P;     //???????????????????????????????????????
        jisuiDay--;      //??????????????\\??°????????????
      }
    }
    ans = max(ans, happy);
  }
  cout << ans << endl;
  return 0;
}