def count_quadruplets_ordered_4_pointers(a: list[int], k1: int, k2: int) -> int:
"""
Counts quadruplets (i, j, k, l) with i < j < k < l
such that a[i] + a[j] > k1 and a[k] + a[l] > k2.
"""
n = len(a)
total_quadruplets = 0
# We use j and k as the two inner pointers
for j in range(1, n - 2):
for k in range(j + 1, n - 1):
# Pointer i: find the first index where a[i] + a[j] > k1
# We can use a 3rd pointer starting from 0 up to j-1
i = 0
while i < j and a[i] + a[j] <= k1:
i += 1
valid_i_count = j - i # All elements from i to j-1 are valid
# Pointer l: find the first index from the right where a[k] + a[l] <= k2
# Our 4th pointer 'l' counts how many elements from the end satisfy the condition
l = n - 1
while l > k and a[k] + a[l] > k2:
l -= 1
valid_l_count = n - 1 - l # All elements from l+1 to n-1 are valid
total_quadruplets += valid_i_count * valid_l_count
return total_quadruplets
ZGVmIGNvdW50X3F1YWRydXBsZXRzX29yZGVyZWRfNF9wb2ludGVycyhhOiBsaXN0W2ludF0sIGsxOiBpbnQsIGsyOiBpbnQpIC0+IGludDoKICAgICIiIgogICAgQ291bnRzIHF1YWRydXBsZXRzIChpLCBqLCBrLCBsKSB3aXRoIGkgPCBqIDwgayA8IGwgCiAgICBzdWNoIHRoYXQgYVtpXSArIGFbal0gPiBrMSBhbmQgYVtrXSArIGFbbF0gPiBrMi4KICAgICIiIgogICAgbiA9IGxlbihhKQogICAgdG90YWxfcXVhZHJ1cGxldHMgPSAwCiAgICAKICAgICMgV2UgdXNlIGogYW5kIGsgYXMgdGhlIHR3byBpbm5lciBwb2ludGVycwogICAgZm9yIGogaW4gcmFuZ2UoMSwgbiAtIDIpOgogICAgICAgIGZvciBrIGluIHJhbmdlKGogKyAxLCBuIC0gMSk6CiAgICAgICAgICAgIAogICAgICAgICAgICAjIFBvaW50ZXIgaTogZmluZCB0aGUgZmlyc3QgaW5kZXggd2hlcmUgYVtpXSArIGFbal0gPiBrMQogICAgICAgICAgICAjIFdlIGNhbiB1c2UgYSAzcmQgcG9pbnRlciBzdGFydGluZyBmcm9tIDAgdXAgdG8gai0xCiAgICAgICAgICAgIGkgPSAwCiAgICAgICAgICAgIHdoaWxlIGkgPCBqIGFuZCBhW2ldICsgYVtqXSA8PSBrMToKICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICB2YWxpZF9pX2NvdW50ID0gaiAtIGkgICMgQWxsIGVsZW1lbnRzIGZyb20gaSB0byBqLTEgYXJlIHZhbGlkCiAgICAgICAgICAgIAogICAgICAgICAgICAjIFBvaW50ZXIgbDogZmluZCB0aGUgZmlyc3QgaW5kZXggZnJvbSB0aGUgcmlnaHQgd2hlcmUgYVtrXSArIGFbbF0gPD0gazIKICAgICAgICAgICAgIyBPdXIgNHRoIHBvaW50ZXIgJ2wnIGNvdW50cyBob3cgbWFueSBlbGVtZW50cyBmcm9tIHRoZSBlbmQgc2F0aXNmeSB0aGUgY29uZGl0aW9uCiAgICAgICAgICAgIGwgPSBuIC0gMQogICAgICAgICAgICB3aGlsZSBsID4gayBhbmQgYVtrXSArIGFbbF0gPiBrMjoKICAgICAgICAgICAgICAgIGwgLT0gMQogICAgICAgICAgICB2YWxpZF9sX2NvdW50ID0gbiAtIDEgLSBsICAjIEFsbCBlbGVtZW50cyBmcm9tIGwrMSB0byBuLTEgYXJlIHZhbGlkCiAgICAgICAgICAgIAogICAgICAgICAgICB0b3RhbF9xdWFkcnVwbGV0cyArPSB2YWxpZF9pX2NvdW50ICogdmFsaWRfbF9jb3VudAogICAgICAgICAgICAKICAgIHJldHVybiB0b3RhbF9xdWFkcnVwbGV0cwo=