Advertisement
pb_jiang

LC2552 AC

Jan 28th, 2023
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.29 KB | None | 0 0
  1. class Solution {
  2.     using ll = long long;
  3.     using vl = vector<ll>;
  4.     using vvl = vector<vector<ll>>;
  5. public:
  6.     long long countQuadruplets(vector<int>& ns) {
  7.         ll ret = 0;
  8.         int n = ns.size();
  9.         vvl ij(n + 1, vl(n + 1));
  10.         vvl kl(n + 1, vl(n + 1));
  11.         for (int i = 0; i < n; ++i) {
  12.             for (int j = 0; j < i; ++j) {
  13.                 if (ns[j] < ns[i]) ij[i][ns[j]]++;
  14.             }
  15.             /*
  16.             ll sum = 0;
  17.             for (int j = 0; j <= n; ++j) sum += ij[i][j];
  18.             for (int j = n; j >= 0; --j) {
  19.                 ll old = ij[i][j];
  20.                 ij[i][j] += sum - old;
  21.                 sum -= old;
  22.             }*/
  23.             for (int j = 1; j <= n; ++j) ij[i][j] += ij[i][j-1];
  24.         }
  25.         for (int k = n - 1; k >= 0; --k) {
  26.             int val = 0;
  27.             for (int l = n - 1; l > k; --l) {
  28.                 if (ns[k] < ns[l]) ++val;
  29.                 kl[k][l] = val;
  30.             }
  31.         }
  32.         for (int k = 0; k + 1 < n; ++k)
  33.             for (int j = 1; j < k; ++j)
  34.                 if (ns[k] < ns[j]) {
  35.                     // printf("k:%d j:%d, ij:%lld kl:%lld\n", k, j, ij[j][k-1], kl[j][k]);
  36.                     ret += ij[j][ns[k]-1] * kl[j][k];
  37.                 }
  38.         return ret;
  39.     }
  40. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement